Django queryset在聚合之前筛选相关表对象

2024-05-14 23:08:14 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑Django文档中的此模型: Aggregation and Avg

有这样一个查询集:

Author.objects.annotate(average_rating=Avg('book__rating'))

它将返回所有作者按其所有书籍的平均比率进行批注。 如果我想查询作者的平均出书率注释,例如在2016年。在

注意,我想用尽可能少的查询得到结果。在


Tags: anddjango文档模型objects作者author比率
1条回答
网友
1楼 · 发布于 2024-05-14 23:08:14

假定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意味着检查bookpubdate是否小于(__lty2016(2016年1月1日)。在

如果filter在之前被应用,annotate将过滤掉2016年之前出版的书籍。请注意,在2016年之前没有发表过文章的作者将会在结果中出现。但这似乎是合乎逻辑的(因为你不能计算一个空集的平均值)。在

相关问题 更多 >

    热门问题