2010-07-02 4 views
27

Il semble que la méthode de filtre de modèle objet de Django utilise automatiquement le mot clé AND SQL.Comment utiliser OU utiliser le système de filtre modèle de Django?

Par exemple:

>>> Publisher.objects.filter(name__contains="press", country__contains="U.S.A") 

se traduira automatiquement en quelque chose comme:

SELECT ... 
FROM publisher 
WHERE name LIKE '%press%' 
AND country LIKE '%U.S.A.%' 

Cependant, je me demandais s'il y avait un moyen de faire que « ET » un « OU »? Je n'arrive pas à le trouver dans la documentation (bizarrement, la recherche de 'ou' n'est pas vraiment utile).

Répondre

52

Vous pouvez utiliser Q objects pour faire ce que vous voulez, par OU logique bit-les ensemble:

from django.db.models import Q 
Publisher.objects.filter(Q(name__contains="press") | Q(country__contains="U.S.A")) 
+0

Merci! On dirait que ça devrait faire l'affaire. – Simon

Questions connexes