考虑这个模型的Django文档中筛选相关的表对象他们的书。 如果我想查询作者注释的作者的平均比率,例如2016年已发布的作品,该怎么办。Django的查询集聚合之前
请注意,我想用尽可能少的查询来获得结果。
考虑这个模型的Django文档中筛选相关的表对象他们的书。 如果我想查询作者注释的作者的平均比率,例如2016年已发布的作品,该怎么办。Django的查询集聚合之前
请注意,我想用尽可能少的查询来获得结果。
鉴于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月初)。
万一filter
被的annotate
之前应用它会过滤掉书前,其2016年需要注意的是那些没有在2016年前publised作者将不在生成的QuerySet
被publised。但这似乎是合乎逻辑的(因为你无法计算空集上的平均值)。
是不是只会过滤2016年之前至少有一本书的作者,但是仍然会以** all **的平均值对他们的书进行注释? – schwobaseggl
@schwobaseggl:afaik,它不会。没有图书的过滤器将不会出现在结果中。但是基于其他查询,它将省略2016年之前发布的图书。 –
book__pubdate__lt = y2016仅表示查找2016年以前已发布图书的作者。它不会按pubdate过滤图书。 –
你能描述'Author'和'Book'的模型吗? –
它们位于我在第一行中引用的文档页面的开头。 –