Можно ли переопределить .objects на модели Django? - PullRequest
7 голосов
/ 21 января 2011

Я бы хотел, чтобы по умолчанию возвращались только «опубликованные» экземпляры (опубликовано = True). Можно ли переопределить .objects, чтобы MyModel.objects.all () фактически возвращал MyModel.objects.filter (опубликовано = True)?

Это разумно? Как бы я получить неопубликованные в тех редких случаях, когда я хотел их?

1 Ответ

16 голосов
/ 21 января 2011

Вы можете сделать это, написав собственный Manager - просто переопределите метод get_queryset и задайте для objects экземпляр Manager.Например:

class MyModelManager(models.Manager):
    def get_queryset(self):
        return super(MyModelManager, self).get_queryset().filter(published=True)

class MyModel(models.Model):
    # fields
    # ...

    objects = MyModelManager()

Подробнее см. документы .Это разумно, если это будет ваш обычный случай по умолчанию.Чтобы стать неопубликованным, создайте другого менеджера, к которому вы можете получить доступ, например, MyModel.unpublished_objects.Опять же, в документах есть примеры подобных вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...