Sobes.tech
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 выполняет два запроса: один для авторов, другой для всех книг, связанных с этими авторами, и затем связывает данные в памяти.