Специфичные для 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/6.0/ref/contrib/postgres/expressions/