Вы можете сделать это с помощью специального менеджера моделей и переопределить функцию get_queryset
, чтобы фильтр всегда отменял = False.
class CustomManager(models.Manager):
def get_queryset(self):
return super(CustomManager, self).get_queryset().filter(canceled=False)
class MyModel(models.Model):
# Blah blah
objects = CustomManager()
Тогда при вызове MyModel.objects.all()
он всегда исключает отмененные объекты. Вот сообщение в блоге, которое я нашел полезным на эту тему. http://www.b -list.org / блог / 2006 / август / 18 / Джанго-подсказки-используя-свойства-модели-и-менеджеры /
EDIT:
Возможно, лучшим подходом к использованию пользовательского менеджера будет присоединение его к другому свойству, отличному от объектов, таких как:
class MyModel(models.Model):
# Blah blah
active = CustomManager()
И, по вашему мнению, ваши запросы будут выглядеть как MyModel.active.all()
.
EDIT2:
Обновлено современное написание метода с get_query_set
до get_queryset
для современных версий django.