РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
137 of 818 menu

Класс Q

Класс Q применяется для создания сложных запросов к базе данных, которые требуют логических операций, таких как И, ИЛИ и НЕ. Обычный filter с несколькими аргументами объединяет их через И, но Q позволяет гибко комбинировать условия с помощью битовых операторов & (И), | (ИЛИ) и ~ (НЕ). Объекты Q могут быть переданы в методы filter, exclude и другие.

Синтаксис

from django.db.models import Q # Создание объекта Q с условием Q(поле__оператор=значение)

Пример

Давайте найдем все статьи, у которых статус "published" или автор имеет имя "admin":

from myapp.models import Article from django.db.models import Q res = Article.objects.filter( Q(status='published') | Q(author__username='admin') ) for article in res: print(article.title)

Результат выполнения кода:

"first article" "second article" "admin post"

Пример

Найдем статьи, которые не находятся в статусе "draft" и не имеют тега "archive":

from myapp.models import Article from django.db.models import Q res = Article.objects.filter( ~Q(status='draft') & ~Q(tags__name='archive') ) for article in res: print(article.title)

Результат выполнения кода:

"first article" "published post"

Пример

Создадим сложный запрос, который объединяет несколько условий с помощью скобок:

from myapp.models import Article from django.db.models import Q res = Article.objects.filter( (Q(status='published') & Q(views__gt=100)) | (Q(status='featured') & Q(created_at__year=2025)) ) for article in res: print(article.title)

Результат выполнения кода:

"popular article" "featured 2025 post"

Пример

Используем Q внутри exclude для исключения записей, которые соответствуют сложному условию:

from myapp.models import Article from django.db.models import Q res = Article.objects.exclude( Q(status='archived') | Q(views__lt=10) ) for article in res: print(article.title)

Результат выполнения кода:

"first article" "popular article"

Смотрите также

  • класс F,
    который позволяет выполнять операции с полями модели на уровне базы данных
  • метод filter,
    который фильтрует QuerySet по заданным условиям
  • метод exclude,
    который исключает записи из QuerySet
  • метод get,
    который получает одну запись из базы данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить