Я имею в виду фрагмент кода в первом ответе, взятом из
этот пост: Пользовательский QuerySet и Manager без прерывания DRY?
from django.db import models
from django.db.models.query import QuerySet
class CustomQuerySetManager(models.Manager):
"""A re-usable Manager to access a custom QuerySet"""
def __getattr__(self, attr, *args):
try:
return getattr(self.__class__, attr, *args)
except AttributeError:
return getattr(self.get_query_set(), attr, *args)
def get_query_set(self):
return self.model.QuerySet(self.model)
Вот модель:
from custom_queryset.models import CustomQuerySetManager
from django.db.models.query import QuerySet
class Inquiry(models.Model):
objects = CustomQuerySetManager()
class QuerySet(QuerySet):
def active_for_account(self, account):
self.filter(account = account, deleted=False, *args, **kwargs)
self.model.QuerySet(self.model)
всегда получает одну и ту же модель, но результат QuerySet зависит от входного QuerySet. Например:
Inquiry.objects.all()[:5].active_for_account(xyz)
, тогда active_for_account
получит набор запросов из 5 элементов, а в Inquiry.objects.all()[:7].active_for_account(xyz)
, active_for_account
получит набор запросов из 7 элементов. Вот следы стека:
Inquiry.objects.all()[:5].active_for_account(xyz)
return getattr(self.get_query_set(), attr, *args),
return self.model.QuerySet(self.model) (1)
Inquiry.objects.all()[:7].active_for_account(xyz)
return getattr(self.get_query_set(), attr, *args),
return self.model.QuerySet(self.model) (2)
Почему результаты в (1) и (2) отличаются?