Como faço para criar uma consulta Django equivalente a uma consulta SQL usando o operador ou?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Em Django, eu sei usar filter Com vários argumentos, é traduzido para SQL AND cláusulas. Do livro de Django:

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

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

Esses múltiplos argumentos são traduzidos em SQL e cláusulas. Assim, o exemplo no snippet de código se traduz no 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 uma consulta Django que é traduzida para o SQL OR cláusulas? Por exemplo:

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

Solução

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

Ou seja:

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top