При ForeignKey tv_channel шаблон может породить N+1: один запрос за передачами и отдельный за каналом каждой записи. Загрузите канал через select_related до обхода.
telecast_qs = Telecast.objects.all()[:10]
При ForeignKey tv_channel шаблон может породить N+1: один запрос за передачами и отдельный за каналом каждой записи. Загрузите канал через select_related до обхода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
telecast_qs = Telecast.objects.all()[:10] {% for telecast in telecast_qs %} {{ telecast.title }} by {{ telecast.tv_channel.title }} {% endfor %}
Ответ
При ForeignKey tv_channel шаблон может породить N+1: один запрос за передачами и отдельный за каналом каждой записи. Загрузите канал через select_related до обхода.
telecast_qs = (Telecast.objects
.select_related('tv_channel')
.order_by('id')[:10])
Имя связи берётся из условия; order_by задаёт определённые первые десять записей. select_related объединяет подходящую одиночную связь в SQL JOIN. Для многозначной связи нужен другой подход, обычно prefetch_related. QuerySet ленивый, реальное выполнение происходит при потреблении.