[英]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
小于( __lt
) y2016
(在一月一日2016)。
如果在annotate
之前应用了filter
,它将过滤掉在2016年之前出版的书籍。请注意,未在2016年之前出版的作者将不在结果QuerySet
。 但这似乎是合乎逻辑的(因为您无法计算空集的平均值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.