Expresiones de consulta específicas de PostgreSQL

Estas expresiones están disponibles desde el módulo django.contrib.postgres.expressions.

ArraySubquery() expresiones

class ArraySubquery(queryset)[fuente]

ArraySubquery es una Subquery que utiliza el constructor PostgreSQL ARRAY para construir una lista de valores a partir del conjunto de resultados, que debe utilizar la función QuerySet.values() para devolver solo una columna.

Esta clase difiere de ArrayAgg en la forma en que no actúa como una función agregada y no requiere un cláusula SQL GROUP BY para construir la lista de valores.

Por ejemplo, si deseas anotar todos los libros relacionados con un autor como objetos 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}]