Как Django оценивает менеджеры объектов, когда у нас их несколько?
Рассмотрим следующие объекты в Django ORM:
class Post(models.Model):
...
published = PublishedPostManager()
objects = models.Manager()
Сейчас в админке Django отображаются только опубликованные. Можем ли мы изменить поведение, чтобы Django ORM использовал объекты по умолчанию без какого-либо порядка?
Как описано в docs
:
Если вы используете пользовательские объекты Manager, обратите внимание, что первый Manager, с которым сталкивается Django (в том порядке, в котором они определены в модели), имеет особый статус. Django интерпретирует первый менеджер, определенный в классе, как менеджер "по умолчанию"
.
Чтобы использовать objects
по умолчанию, поставьте его перед published
:
class Post(models.Model):
...
objects = models.Manager()
published = PublishedPostManager()
или определить его как менеджер по умолчанию в модели Meta
:
class Post(models.Model):
...
published = PublishedPostManager()
objects = models.Manager()
class Meta:
default_manager_name = 'objects'