Итак, я прочитал большинство документов и немного искал по SO, но не могу найти ответ на свой вопрос.Я начну с кода.
# Manager
class ActiveManager(models.Manager):
def get_query_set(self):
return super(ActiveManager, self).get_query_set().filter(is_active=True)
# Model
class ModelA(models.Model):
# ...
is_active = models.BooleanField()
objects = ActiveManager()
all_objects = models.Manager()
Итак, пока я играл, я заметил, что если бы я написал это таким образом и использовал get_object_or_404()
, то он использовал бы ActiveManager
сначала найти все активные записи, а затем вернуть ту, которая относится к моему запросу.Однако, если я сменил порядок менеджеров:
class ModelA(models.Model):
# ...
all_objects = models.Manager()
objects = ActiveManager()
Тогда он использует менеджер по умолчанию, в данном случае all_objects
, для выполнения запроса.Мне интересно, какие другие функции влияют на это изменение.
РЕДАКТИРОВАТЬ: я понимаю, что первый менеджер в классе становится менеджером по умолчанию, но мне интересно, какие конкретные функции используют этот менеджер по умолчанию (например, get_object_or_404
)