¿Cómo creo un queryset Django equivalente a una consulta SQL utilizando el operador OR?
-
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';
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