Как мне создать набор запросов Django, эквивалентный SQL-запросу, используя оператор OR?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

В Django я знаю, как использовать filter с несколькими аргументами преобразуется в SQL AND пункты.Из книги о Джанго:

Вы можете передать несколько аргументов в filter(), чтобы сузить область поиска далее:

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

Эти множественные аргументы будут переведены в SQL И предложения.Таким образом, пример во фрагменте кода преобразуется в следующее:

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

Как мне создать набор запросов Django, который будет переведен в SQL OR пункты?Например:

SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE state_province = 'AZ'
OR state_province = 'CA'; 
Это было полезно?

Решение

использование оператора Q, доступного в django.db.models

Т. Е.:

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

Загляните в документацию здесь: http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top