Come faccio a creare un queryset Django equivalente a una query SQL usando l'operatore OR?
-
05-07-2019 - |
Domanda
In Django, so che l'utilizzo di filter
con più argomenti viene tradotto in clausole SQL AND
. Dal libro Django:
Puoi passare più argomenti in filter () per restringere le cose inoltre:
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA") [<Publisher: Apress>]
Questi argomenti multipli ottengono tradotto in clausole SQL AND. Così, l'esempio nello snippet di codice si traduce in quanto segue:
SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE country = 'U.S.A.' AND state_province = 'CA';
Come posso creare un queryset Django che viene tradotto in clausole SQL OR
? Ad esempio:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE state_province = 'AZ'
OR state_province = 'CA';
Soluzione
utilizzando l'operatore Q disponibile in django.db.models
IE:
from django.db.models import Q
Publisher.objects.filter(Q(state_province="CA") | Q(state_province="AZ"))
Dai un'occhiata ai documenti qui: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow