Junior — Middle
79
Comment Django implémente-t-il le mécanisme de préchargement des objets liés avec prefetch_related ?
Entreprises à qui on a demandé
Effective Mobile
Réponse de l'IA
sobes.tech IA
В Django метод prefetch_related используется для оптимизации запросов к базе данных, когда нужно получить связанные объекты (например, связанные через ForeignKey, ManyToMany и т.п.).
Механизм работает так: Django выполняет отдельный SQL-запрос для связанных объектов и затем связывает их с основными объектами в Python-коде. Это позволяет избежать проблемы N+1 запросов, когда для каждого объекта основного запроса делается отдельный запрос к связанной таблице.
Пример:
# Предположим, есть модели Author и Book, где у автора много книг
authors = Author.objects.prefetch_related('book_set').all()
for author in authors:
books = list(author.book_set.all()) # книги уже загружены, дополнительных запросов нет
Таким образом, prefetch_related выполняет два запроса: один для авторов, другой для всех книг, связанных с этими авторами, и затем связывает данные в памяти.