Управляющие выражения запросов PostgreSQL
Эти выражения доступны из модуля django.contrib.postgres.expressions.
ArraySubquery() выражения
-
class ArraySubquery(queryset)
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.2/ref/contrib/postgres/expressions/