Выражения запросов, специфичные для 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.1/ref/contrib/postgres/expressions/