繁体   English   中英

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

[英]Django queryset - Filtering related table objects before aggregation

在Django文档中考虑以下模型: 聚合和平均

有一个这样的查询集:

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

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

请注意,我想获得尽可能少的查询结果。

鉴于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意味着你检查pubdate的的book小于( __lty2016 (在一月一日2016)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM