2009-05-05 7 views
6

Dans Django, je sais que l'utilisation de filter avec plusieurs arguments est traduite en clauses SQL AND. De Django livre:Comment créer un ensemble de requêtes Django équivalent à une requête SQL à l'aide de l'opérateur OR?

Vous pouvez passer plusieurs arguments en pour affiner les choses filtre() plus:

>>> Publisher.objects.filter(country="U.S.A.", state_province="CA") 
[<Publisher: Apress>] 

Ces multiples arguments sont traduits en SQL et clauses. Ainsi, l'exemple dans le code snippet se traduit comme suit:

SELECT id, name, address, city, state_province, country, website 
FROM books_publisher 
WHERE country = 'U.S.A.' 
AND state_province = 'CA'; 

Comment puis-je créer un queryset Django qui se traduit dans les clauses SQL OR? Par exemple:

SELECT id, name, address, city, state_province, country, website 
FROM books_publisher 
WHERE state_province = 'AZ' 
OR state_province = 'CA'; 

Répondre

21

en utilisant l'opérateur Q disponible dans django.db.models

IE:

from django.db.models import Q 
Publisher.objects.filter(Q(state_province="CA") | Q(state_province="AZ")) 

Jetez un oeil dans les docs ici: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

+0

Great! C'est ce que je cherchais. Je pense avoir lu cette section des documents, mais je ne l'ai pas trouvée aujourd'hui. Je vous remercie. – saltycrane

+0

Pas de soucis, l'ai utilisé de nombreuses fois, donc il est apparu dans ma tête. :) –

Questions connexes