特定于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}]