一尘不染

Django的注释方法和聚合方法之间的区别?

django

Django QuerySet有两种方法,annotateaggregate。该文档说:

与gregation()不同,annotate()不是终端子句。annotate()子句的输出是QuerySet。

它们之间还有其他区别吗?如果没有,那为什么aggregate存在呢?


阅读 401

收藏
2020-03-31

共1个答案

一尘不染

我将重点放在示例查询而不是文档中的引用上。Aggregate计算整个查询集的值。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 是书籍的查询集,但每本书都注明了作者人数。

2020-03-31