PostgreSQL 特有查询表达式
这些表达式可以从 django.contrib.postgres.expressions
模块中获得。
ArraySubquery()
表达式
class ArraySubquery
(queryset)
ArraySubquery
是一个 Subquery,使用 PostgreSQL 的 ARRAY
构造函数,从查询集中建立一个值列表,它必须使用 QuerySet.values() 来只返回一个列。
这个类与 ArrayAgg 不同,它不作为一个聚合函数,也不需要一个 SQL GROUP BY
子句来建立值的列表。
For example, if you want to annotate all related books to an author as JSON objects:
>>> 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}]