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