gpt4 book ai didi

python - Django queryset - 在聚合之前过滤相关的表对象

转载 作者:行者123 更新时间:2023-11-28 22:23:56 25 4
gpt4 key购买 nike

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

有这样一个查询集:

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

返回按所有书籍的平均注释率注释的所有作者。如果我想查询按平均出版率注释的作者,例如 2016 年出版的书籍。

请注意,我希望通过尽可能少的查询获得结果。

最佳答案

假设 Book 模型有一个 pubdate 属性,它是一个 DateField,您可以使用:

from datetime import datetime

y2016 = datetime(2016,1,1)

Author.objects.<b>filter(book__pubdate__lt=y2016)</b> \
.annotate(average_rating=Avg('book__rating'))

因此 book__pubdate__lt 意味着您检查 bookpubdate 是否小于 (__lt) y2016(2016 年 1 月 1 日)。

如果 filter annotate 之前应用,它将过滤掉 2016 年之前出版的书籍。请注意,作者有2016 年之前未发布的内容不会出现在生成的 QuerySet 中。但这似乎合乎逻辑(因为您无法计算空集的平均值)。

关于python - Django queryset - 在聚合之前过滤相关的表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com