Como faço para criar um queryset Django equivalente a uma consulta SQL usando o operador OR?

votos
6

No Django, eu sei usar filtercom vários argumentos é traduzida em SQL ANDcláusulas. Do livro Django:

Você pode passar vários argumentos em filter () para diminuir ainda mais as coisas:

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

Esses múltiplos argumentos se traduzido em SQL e cláusulas. Assim, o exemplo no fragmento de código traduz-se o seguinte:

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

Como faço para criar um Django queryset que é traduzido para SQL ORcláusulas? Por exemplo:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE state_province = 'AZ'
OR state_province = 'CA'; 
Publicado 06/05/2009 em 00:28
fonte usuário
Em outras línguas...                            


1 respostas

votos
21

usando o operador Q disponível em django.db.models

IE:

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

Dê uma olhada nos docs aqui: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Respondeu 06/05/2009 em 00:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more