Выражения запросов, специфичные для PostgreSQL

Эти выражения доступны из модуля django.contrib.postgres.expressions.

ArraySubquery() выражения

class ArraySubquery(queryset)
New in Django 4.0.

ArraySubquery - это Subquery, который использует конструктор PostgreSQL ARRAY для построения списка значений из queryset, который должен использовать 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}]
Вернуться на верх