2024-05-14 23:08:14 发布
网友
考虑Django文档中的此模型: Aggregation and Avg
有这样一个查询集:
Author.objects.annotate(average_rating=Avg('book__rating'))
它将返回所有作者按其所有书籍的平均比率进行批注。 如果我想查询作者的平均出书率注释,例如在2016年。在
注意,我想用尽可能少的查询得到结果。在
假定Book模型有一个属性pubdate,它是DateField,您可以使用:
Book
pubdate
DateField
from datetime import datetime y2016 = datetime(2016,1,1) Author.objects.filter(book__pubdate__lt=y2016) \ .annotate(average_rating=Avg('book__rating'))
因此book__pubdate__lt意味着检查book的pubdate是否小于(__lt)y2016(2016年1月1日)。在
book__pubdate__lt
book
__lt
y2016
如果filter在之前被应用,annotate将过滤掉2016年之前出版的书籍。请注意,在2016年之前没有发表过文章的作者将会在结果中出现。但这似乎是合乎逻辑的(因为你不能计算一个空集的平均值)。在
filter
annotate
假定
Book
模型有一个属性pubdate
,它是DateField
,您可以使用:因此
book__pubdate__lt
意味着检查book
的pubdate
是否小于(__lt
)y2016
(2016年1月1日)。在如果
filter
在之前被应用,annotate
将过滤掉2016年之前出版的书籍。请注意,在2016年之前没有发表过文章的作者将会在结果中出现。但这似乎是合乎逻辑的(因为你不能计算一个空集的平均值)。在相关问题 更多 >
编程相关推荐