L'autre option est que si vous avez un filtre que vous en voulez toujours appliqué, pour ajouter un custom manager sur le modèle en question, qui s'applique toujours le filtre sur les résultats retournés.
Un bon exemple de ceci est une Event
modèle, où 90% des requêtes sur le modèle que vous allez vouloir quelque chose comme Event.objects.filter(date__gte=now)
, c'est à dire que vous êtes normalement intéresse Events
qui sont à venir. Cela ressemblerait à:
class EventManager(models.Manager):
def get_query_set(self):
now = datetime.now()
return super(EventManager,self).get_query_set().filter(date__gte=now)
Et dans le modèle:
class Event(models.Model):
...
objects = EventManager()
Mais encore une fois, cela s'applique de la même filtre contre toutes les requêtes par défaut fait sur l' Event
modèle et donc n'est pas aussi flexible certaines des techniques décrites ci-dessus.