Expressions de requête spécifiques à PostgreSQL

Ces expressions sont disponibles dans le module django.contrib.postgres.expressions.

Expressions ArraySubquery()

class ArraySubquery(queryset)
New in Django 4.0.

ArraySubquery est une sous-requête Subquery qui utilise le constructeur PostgreSQL ARRAY pour construire une liste de valeurs du jeu de requêtem qui doit utiliser QuerySet.values() pour ne renvoyer qu’une seule colonne.

Cette classe diffère de ArrayAgg dans le sens où elle n’agit pas comme une fonction d’agrégat et n’exige pas de clause SQL GROUP BY pour construire la liste des valeurs.

Par exemple, si vous souhaitez annoter tous les livres liés à un auteur sous forme d’objet 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}]
Back to Top