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

Что такое prefetch_related() в Django

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

Пример:

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

# С prefetch_related — всего 2 запроса
authors = Author.objects.prefetch_related('books')
for author in authors:
    books = author.books.all()  # Данные уже в кэше

Ключевые моменты:

  1. Работает для ManyToMany и reverse ForeignKey
  2. Выполняет дополнительные запросы, но минимизирует их количество
  3. Можно каскадировать: prefetch_related('books__publisher')
  4. Позволяет делать сложные префетчи через Prefetch() объекты
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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