Comment créer un ensemble de requêtes Django équivalent à une requête SQL en utilisant l'opérateur OR?
-
05-07-2019 - |
Question
Dans Django, je sais que l'utilisation de filtre
avec plusieurs arguments est traduite en clauses SQL AND
. Du livre Django:
Vous pouvez passer plusieurs arguments dans filter () pour affiner les choses plus loin:
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA") [<Publisher: Apress>]
Ces arguments multiples sont traduit en SQL ET clauses. Ainsi, l'exemple dans l'extrait de code 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 créer un ensemble de requêtes Django qui doit être traduit en 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';
La solution
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"))
Consultez la documentation ici: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow