Comment créer un ensemble de requêtes Django équivalent à une requête SQL en utilisant l'opérateur OR?

StackOverflow https://stackoverflow.com/questions/827384

  •  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'; 
Était-ce utile?

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
scroll top