PostgreSQL 特定查询表达式¶
这些表达式可从 django.contrib.postgres.expressions
模块获取。
ArraySubquery()
表达式¶
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}]