Django QuerySet有两种方法,annotate和aggregate。该文档说:
QuerySet
annotate
aggregate
与gregation()不同,annotate()不是终端子句。annotate()子句的输出是QuerySet。
它们之间还有其他区别吗?如果没有,那为什么aggregate存在呢?
我将重点放在示例查询而不是文档中的引用上。Aggregate计算整个查询集的值。Annotate计算查询集中每个项目的汇总值。
ggregate
Annotate
聚合
>>> Book.objects.aggregate(average_price=Avg('price')) {'average_price': 34.35}
返回包含查询集中所有书籍的平均价格的字典。
注解
>>> q = Book.objects.annotate(num_authors=Count('authors')) >>> q[0].num_authors 2 >>> q[1].num_authors 1
q 是书籍的查询集,但每本书都注明了作者人数。