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

Что такое prefetch_related

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

Пример:

python
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

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

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

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

  • Работает для ManyToManyField и обратных связей ForeignKey.
  • Использует два запроса: первый — для основной модели, второй — для связанных объектов.
  • Эффективен при большом количестве объектов.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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