Другой вариант заключается в том, что если у вас есть фильтр, который вы всегда хотите применить, добавьте настраиваемый менеджер к рассматриваемой модели, который всегда применяет фильтр к возвращаемым результатам.
Хорошим примером этого является модель 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
, и поэтому он не настолько гибок, как некоторые из методов, описанных выше.