Spec-Zone.ru › Django 5.1

Уникальные выражения запросов PostgreSQL

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

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

class ArraySubquery(queryset) [source]

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/5.1/ref/contrib/postgres/expressions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API