PostgreSQL-specifika frågeuttryck¶
Dessa uttryck är tillgängliga från modulen django.contrib.postgres.expressions
.
uttryck för ArraySubquery()
¶
ArraySubquery
är en Subquery`
som använder PostgreSQL ARRAY
-konstruktören för att bygga en lista med värden från queryset, som måste använda QuerySet.values`()
för att bara returnera en enda kolumn.
Den här klassen skiljer sig från ArrayAgg
på så sätt att den inte fungerar som en aggregatfunktion och inte kräver en SQL GROUP BY
-klausul för att bygga upp listan över värden.
Om du t.ex. vill annotera alla relaterade böcker till en författare som JSON-objekt:
>>> 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}]