Можно ли переопределить.objects на модели Django?

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

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

1 ответ

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

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, Опять же, в документах есть примеры подобных вещей.

Другие вопросы по тегам