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

Python Senior Без компании
Что такое prefetch_related() в Django
Ответы
`prefetch_related()` — это метод QuerySet в Django, который оптимизирует загрузку связанных объектов для отношений "многие ко многим" (ManyToMany) и "один ко многим" (ForeignKey в обратную сторону). В отличие от `select_related()`, который использует JOIN, `prefetch_related()` делает отдельный запрос для каждой связи и затем "сшивает" результаты в 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() # Данные уже в кэше ``` Ключевые моменты: - Работает для ManyToMany и reverse ForeignKey - Выполняет дополнительные запросы, но минимизирует их количество - Можно каскадировать: `prefetch_related('books__publisher')` - Позволяет делать сложные префетчи через `Prefetch()` объекты