Карточка Junior Django ORM и N+1 обновлено
Объект Q
Вопрос
Зачем нужен Q в Django ORM?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Для сложных условий: ИЛИ (Q(a=1) Q(b=2)), отрицание (Q(...)), группировка скобками. Обычные аргументы filter(a=1, b=2) объединяются только через И.
Ответ
Для сложных условий: ИЛИ (Q(a=1) | Q(b=2)), отрицание (~Q(...)), группировка скобками. Обычные аргументы filter(a=1, b=2) объединяются только через И.
Разбор
Q-объекты можно собирать динамически, например из фильтров формы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Django ORM и N+1»
- Задвоение сумм при нескольких annotate
- Посчитать SQL-запросы при ленивой загрузке
- Как prefetch_related склеивает данные
- exists() и count() вместо загрузки строк
- Атомарное увеличение счётчика
- Prefetch с вложенным select_related
- transaction.atomic
- Когда QuerySet выполняет SQL