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}]
返回頂部