Пропуски Middle Django ORM и N+1 обновлено
Prefetch с вложенным select_related
Вопрос
Допишите запрос: заказы с клиентом одним JOIN и позициями, у которых сразу подгружен товар.
from django.db.models import Prefetch
orders = (
Order.objects
.__(1)__('customer')
.__(2)__(
__(3)__('items', queryset=Item.objects.select_related('product'))
)
)
Попробуйте сами
Заполните пропуски по номерам.
1
2
3
Показать ответ и разбор
Коротко
Клиент это ForeignKey, поэтому selectrelated. Позиции это обратная связь «ко многим», поэтому prefetchrelated, а Prefetch позволяет задать для них свой QuerySet со selectrelated("product").
Что в пропусках
1
select_related
2
prefetch_related
3
Prefetch
Разбор
Клиент это ForeignKey, поэтому select_related. Позиции это обратная связь «ко многим», поэтому prefetch_related, а Prefetch позволяет задать для них свой QuerySet со select_related("product"). Итого три запроса на любое число заказов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.