Объекты Q для сложных фильтров
Объединяйте условия с помощью AND, OR и NOT
«Объекты Q для сложных фильтров» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Beyond Simple filter()
Stacking keyword arguments in filter always means AND. To express OR or NOT, you need a richer tool.
Meet the Q Object
A Q object wraps a condition so you can combine conditions with boolean operators inside a single query.
from django.db.models import QOR with the Pipe
Combine two Q objects with the pipe operator to build an OR, matching rows that satisfy either condition.
Book.objects.filter(Q(title__icontains="django") | Q(title__icontains="flask"))AND with the Ampersand
The ampersand joins Q objects with AND, useful when you want explicit grouping rather than plain keyword stacking.
Book.objects.filter(Q(price__lt=20) & Q(in_stock=True))Negate with the Tilde
Put a tilde in front of a Q object to express NOT, matching every row that fails the condition.
Book.objects.filter(~Q(author__name="Anon"))Mixing Q and Keywords
You may pass Q objects and plain keyword arguments together, but every positional Q must come before any keyword.
Book.objects.filter(Q(price__lt=20) | Q(on_sale=True), in_stock=True)Grouping with Parentheses
Wrap combined Q objects in parentheses to control precedence, just like grouping conditions in raw SQL.
Book.objects.filter((Q(a=1) | Q(b=2)) & Q(c=3))Build Filters Dynamically
Because Q objects are values, you can build them up conditionally in Python before passing the result to filter.
q = Q(active=True)
if term:
q &= Q(name__icontains=term)
User.objects.filter(q)Combine Many with reduce
Need an OR across a list of terms? Fold them together with operator.or_ to produce one combined Q.
from functools import reduce
import operator
reduce(operator.or_, [Q(tag=t) for t in tags])Still One SQL Query
However complex the logic, Django compiles your Q tree into a single WHERE clause, so there is no extra round trip.
When to Use Q
Reach for Q whenever a filter needs OR, NOT, or logic assembled at runtime; plain keywords stay fine for simple ANDs.
Quick Check
You want books whose title contains django OR flask. Which filter expresses that?
Recap
Q objects unlock OR, AND, and NOT logic you can group and build dynamically, all compiled into one query. 🧩
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Объекты Q для сложных фильтров» бесплатный?
Да — полный текст урока «Объекты Q для сложных фильтров» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «Объекты Q для сложных фильтров»?
Объединяйте условия с помощью AND, OR и NOT Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Объекты Q для сложных фильтров»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- aggregate и annotate
- Выражения F для атомарных обновлений
- Объекты Q для сложных фильтров
- Условная агрегация с Case/When