Встречается на собеседованиях • сегодня

Зачем нужен prefetch_related

prefetch_related в Django оптимизирует загрузку связанных объектов для отношений ManyToMany и ForeignKey (в обратную сторону), уменьшая количество SQL-запросов. В отличие от select_related, который делает JOIN, prefetch_related выполняет отдельные запросы, а затем связывает данные на уровне Python.

Пример:

python
# Без prefetch_related: N+1 проблема
books = Book.objects.all()
for book in books:
    print(book.authors.all())  # Отдельный запрос для каждой книги

# С prefetch_related: 2 запроса
books = Book.objects.prefetch_related('authors')
for book in books:
    print(book.authors.all())  # Данные уже загружены

Когда использовать:

  • Для отношений ManyToMany и обратных ForeignKey.
  • Если нужно загрузить глубокие связи (например, prefetch_related('authors__contacts')).
  • Для кастомных Prefetch-объектов с queryset или to_attr.

Ограничение: Не работает с select_related для одних и тех же отношений.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы