Ответ
Для выполнения запросов с условием OR в Django ORM используются объекты Q из модуля django.db.models.
Почему это необходимо?
По умолчанию, несколько условий в одном вызове .filter() или в нескольких последовательных вызовах .filter() объединяются с помощью логического AND.
# Этот запрос ищет: status='published' AND author='admin'
Article.objects.filter(status='published', author='admin')
Для создания OR условий необходимо использовать оператор | между Q объектами.
Пример использования Q для OR:
from django.db.models import Q
from .models import Article
# Найти статьи, которые либо не опубликованы, ЛИБО их рейтинг выше 5
articles = Article.objects.filter(
Q(is_published=False) | Q(rating__gt=5)
)
Комбинирование операторов
Q объекты можно комбинировать для создания сложных запросов, используя операторы:
|(ИЛИ)&(И)~(НЕ)
Пример сложного запроса:
# Найти статьи, где (заголовок содержит 'Django' ИЛИ 'Python') И (рейтинг > 4)
complex_query = Article.objects.filter(
(Q(title__icontains='Django') | Q(title__icontains='Python')) & Q(rating__gt=4)
)
Таким образом, Q объекты являются мощным инструментом для построения любых сложных WHERE выражений в SQL-запросах через Django ORM.