Інший варіант полягає в тому, що якщо у вас є фільтр, який ви завжди хочете застосовувати, додати користувацький менеджер до розглянутої моделі, який завжди застосовує фільтр до повернутих результатів.
Хорошим прикладом цього є 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
моделі, і тому не є настільки гнучким для деяких із описаних вище методів.