Другой вариант заключается в том, что если у вас есть фильтр, который вы всегда хотите применять, добавить настраиваемого менеджера к рассматриваемой модели, который всегда применяет фильтр к возвращаемым результатам.
Хорошим примером этого является Event
модель, в которой для 90% запросов, которые вы выполняете по модели, вам понадобится что-то подобное Event.objects.filter(date__gte=now)
, т. Е. Обычно это вас интересует Events
. Это выглядело бы так:
class EventManager(models.Manager):
def get_query_set(self):
now = datetime.now()
return super(EventManager,self).get_query_set().filter(date__gte=now)
А в модели:
class Event(models.Model):
...
objects = EventManager()
Но опять же, это применяет один и тот же фильтр ко всем запросам по умолчанию, выполняемым в Event
модели, и поэтому не так гибки некоторые из описанных выше методов.