Назад к вопросам
Junior — Middle
66
Возможно ли использовать вложенные запросы в Django ORM и как это устроено?
Ответ от нейросети
sobes.tech AI
Да, в Django ORM можно использовать вложенные запросы, которые называются подзапросами (Subquery). Это позволяет выполнять запросы, где результат одного запроса используется внутри другого, что полезно для сложных фильтраций и аннотаций.
Для создания подзапроса используется класс Subquery из django.db.models. Например, можно выбрать объекты, основываясь на значениях из связанных моделей:
from django.db.models import OuterRef, Subquery
# Предположим, есть модели Author и Book, где Book связан с Author
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)
Здесь OuterRef ссылается на внешний запрос, а Subquery вставляет подзапрос в аннотацию. Таким образом, можно эффективно строить вложенные запросы без написания сырого SQL.