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

Использовал ли prefetch_related

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

Пример:

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.
  • Когда select_related не подходит (нет прямого JOIN).
  • Для уменьшения количества запросов при итерации по связанным объектам.

Нюансы:

  • Не работает с filter() после префетча.
  • Можно кастомизировать через Prefetch() (например, добавить select_related внутри префетча).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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