Inną opcją jest to, że jeśli masz filtr, który zawsze chcesz zastosować, możesz dodać niestandardowego menedżera do danego modelu, który zawsze stosuje filtr do zwracanych wyników.
Dobrym przykładem jest Event
model, w którym dla 90% zapytań, które wykonujesz na modelu, będziesz chciał czegoś takiego Event.objects.filter(date__gte=now)
, tj. Normalnie jesteś zainteresowany Events
tym, co nadchodzi. To wyglądałoby tak:
class EventManager(models.Manager):
def get_query_set(self):
now = datetime.now()
return super(EventManager,self).get_query_set().filter(date__gte=now)
A w modelu:
class Event(models.Model):
...
objects = EventManager()
Ale znowu, to stosuje ten sam filtr do wszystkich domyślnych zapytań wykonywanych w Event
modelu, więc nie jest tak elastyczny w przypadku niektórych technik opisanych powyżej.