Junior — Middle
82
Объясните, что такое подзапросы в Django и как их применять
Answer from AI
sobes.tech AI
В Django подзапросы (Subqueries) позволяют использовать результаты одного запроса внутри другого, что помогает создавать более сложные и эффективные запросы к базе данных без необходимости писать сырой SQL.
Подзапросы применяются с помощью класса Subquery из django.db.models. Например, можно получить объекты с данными, зависящими от связанных моделей.
Пример: допустим, есть модели Author и Book, и нужно получить авторов с названием их самой последней книги:
from django.db.models import OuterRef, Subquery
latest_book = Book.objects.filter(author=OuterRef('pk')).order_by('-published_date')
authors = Author.objects.annotate(
latest_book_title=Subquery(latest_book.values('title')[:1])
)
for author in authors:
print(author.name, author.latest_book_title)
Здесь Subquery вставляет в запрос к авторам название их последней книги, используя подзапрос к таблице книг.
Это мощный инструмент для оптимизации запросов и уменьшения количества обращений к базе.