Die andere Option besteht darin, dass Sie, wenn Sie einen Filter haben, den Sie immer anwenden möchten, dem betreffenden Modell einen benutzerdefinierten Manager hinzufügen , der den Filter immer auf die zurückgegebenen Ergebnisse anwendet.
Ein gutes Beispiel hierfür ist ein Event
Modell, bei dem Sie für 90% der Abfragen, die Sie an dem Modell durchführen, so etwas wie möchten Event.objects.filter(date__gte=now)
, dh Sie sind normalerweise daran interessiert Events
. Das würde so aussehen:
class EventManager(models.Manager):
def get_query_set(self):
now = datetime.now()
return super(EventManager,self).get_query_set().filter(date__gte=now)
Und im Modell:
class Event(models.Model):
...
objects = EventManager()
Dies wendet jedoch wiederum denselben Filter auf alle Standardabfragen an, die für das Event
Modell ausgeführt werden, und ist daher bei einigen der oben beschriebenen Techniken nicht so flexibel.