Проверяет знание инструментов Django ORM для оптимизации запросов к базе данных.
Django предоставляет select_related, prefetch_related, only, defer, annotate и aggregate для оптимизации запросов. Они помогают уменьшить количество SQL-запросов и ускорить работу приложения.
Django ORM предлагает несколько способов оптимизации запросов:
select_related – загружает связанные объекты одним JOIN-запросом (работает для ForeignKey и OneToOne).
prefetch_related – загружает связанные объекты отдельным запросом (подходит для ManyToMany и обратных связей).
only и defer – позволяют загружать только нужные поля модели, уменьшая объем данных.
annotate и aggregate – добавляют вычисляемые поля и агрегации без дополнительных запросов.
Пример:
# Оптимизация с select_related (ForeignKey)
books = Book.objects.select_related('author').all() # 1 запрос вместо N+1
# Оптимизация с prefetch_related (ManyToMany)
authors = Author.objects.prefetch_related('books').all() # 2 запроса вместо N+1Вывод:
Используйте select_related для связей "один-ко-многим" и prefetch_related для "многие-ко-многим". only и defer помогают сократить объем данных.