Spec-Zone.ru › Django 5.0

Управляющие выражения запросов 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/5.0/ref/contrib/postgres/expressions/

Spec-Zone.ru

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