Come faccio a creare un queryset Django equivalente a una query SQL usando l'operatore OR?

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

  •  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'; 
È stato utile?

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