2009-05-05 12 views
6

En Django, sé que usar filter con múltiples argumentos se traduce a SQL AND cláusulas. Del libro de Django:¿Cómo creo un queryset Django equivalente a una consulta SQL usando el operador OR?

Puede pasar múltiples argumentos en filtro() para reducir las cosas más :

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

Esos múltiples argumentos consiguen traducido en SQL y cláusulas. Por lo tanto, 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 se crea un conjunto de consultas Django que se traduce en SQL OR cláusulas? Por ejemplo:

SELECT id, name, address, city, state_province, country, website 
FROM books_publisher 
WHERE state_province = 'AZ' 
OR state_province = 'CA'; 

Respuesta

21

usando 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")) 

Tenga una mirada en la documentación aquí: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

+0

Gran! Esto es lo que estaba buscando. Creo que he leído esa sección de los documentos, pero no la encontré hoy. Gracias. – saltycrane

+0

No me preocupo, lo he usado muchas, muchas veces, así que me saltó en la cabeza. :) –

Cuestiones relacionadas