Sobes.tech
Junior — Middle
80

Объясните, что такое подзапросы в Django и как их применять

Ответ от нейросети

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 вставляет в запрос к авторам название их последней книги, используя подзапрос к таблице книг.

Это мощный инструмент для оптимизации запросов и уменьшения количества обращений к базе.