Встречается на собеседованиях • сегодня
Как prefetch_related подгружает связанные данные в Django
prefetch_related оптимизирует загрузку связанных объектов для отношений ManyToMany и ForeignKey (в обратном направлении), выполняя отдельный запрос для каждого отношения и "соединяя" данные на уровне Python.
Пример:
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)
authors = models.ManyToManyField(Author)
Без 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()) # Данные уже в кэше
text
**Ключевые моменты:**
- Работает только для отношений, где требуется отдельный SQL-запрос (не для `ForeignKey` в прямом направлении — там `select_related`).
- Данные кэшируются в памяти, что может увеличить её использование.
- Поддерживает цепочку: `prefetch_related('authors__publisher')`.
- Можно кастомизировать через `Prefetch()`, например, добавляя фильтры.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы