Ответ 1
Менеджер обычно является чем-то скрытым от программистов django, которые django использует для взаимодействия между кодом model
и бэкэндом базы данных.
Когда вы отправляете запрос в django ORM, вы делаете это через вызовы
from my_app.models import MyModel
mms = MyModel.objects.all()
В этом случае часть функции objects
возвращается менеджером. Если вы хотите, чтобы MyModel получал только экземпляры blue
MyModel
(база данных может также содержать модели red
), вы можете создать менеджера и таким образом взломать вашу модель
class BlueManager(models.Manager):
def get_query_set(self):
return super(BlueManager, self).get_query_set().filter(colour='Blue')
class MyModel(models.Model):
colour = models.CharField(max_length=64)
blue_objects = BlueManager()
и звонит
MyModel.blue_objects.all()
будет возвращать только объекты с colour
как blue
. Обратите внимание, что это очень плохой способ фильтрации моделей!
Обычно нужно изменить интерфейс Manager
, если они собираются изменить QuerySet
, который обычно возвращает менеджер, или если вам нужно добавить запросы уровня "таблицы" (а не обычный уровень "строки" django). документация для менеджеров довольно полная и содержит несколько примеров.