¿Cómo creo un queryset Django equivalente a una consulta SQL utilizando el operador OR?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

En Django, sé que usar filter con múltiples argumentos se traduce en cláusulas AND de SQL. Del libro de Django:

  

Puedes pasar múltiples argumentos a   filtro () para reducir las cosas   además:

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

Esos múltiples argumentos obtienen   traducido a SQL y cláusulas. Así,   el ejemplo en el fragmento de código   se traduce en lo siguiente:

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

¿Cómo creo un conjunto de consultas Django que se traduzca en cláusulas OR de SQL? Por ejemplo:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE state_province = 'AZ'
OR state_province = 'CA'; 
¿Fue útil?

Solución

utilizando el operador Q disponible en django.db.models

IE:

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

Eche un vistazo a los documentos aquí: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top