Управляющие выражения запросов PostgreSQL
Эти выражения доступны из модуля django.contrib.postgres.expressions.
ArraySubquery() выражения
-
class ArraySubquery(queryset)
Новое в Django 4.0.
ArraySubquery — это Subquery, который использует конструктор PostgreSQL ARRAY для создания списка значений из набора результатов запроса, который должен использовать QuerySet.values() для возвращения только одного столбца.
Этот класс отличается от ArrayAgg тем, что не работает как агрегатная функция и не требует входящей в SQL GROUP BY части для создания списка значений.
Например, если вы хотите добавить аннотации всех связанных книг к автору в виде JSON-объектов:
>>> from django.db.models import OuterRef
>>> from django.db.models.functions import JSONObject
>>> from django.contrib.postgres.expressions import ArraySubquery
>>> books = Book.objects.filter(author=OuterRef('pk')).values(
... json=JSONObject(title='title', pages='pages')
... )
>>> author = Author.objects.annotate(books=ArraySubquery(books)).first()
>>> author.books
[{'title': 'Solaris', 'pages': 204}, {'title': 'The Cyberiad', 'pages': 295}]
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/expressions/