我有一个Django 1.9查询集qs,我添加了以下注释:
qs = qs.annotate(total_messages=
Sum(Case(..., output_field=FloatField()))
qs = qs.annotate(spam_messages=
Sum(Case(..., output_field=FloatField()))
qs = qs.annotate(spam_rate=F('spam_messages')/F('total_messages'))
奇怪的是,结果似乎向下舍入(如Math.floor),因此我得到以下结果(示例):
total_messages = 40.0, spam_messages = 24.0, spam_rate = 0.0
total_messages = 10.0, spam_messages = 10.0, spam_rate = 1.0
此外,可能是这种情况只发生在从Django 1.7升级到Django 1.9之后。
我做错了什么还是错误?
提前致谢!
答案 0 :(得分:0)
好的,感谢lac的评论发现了这个问题:
在案例中(...)我有这样的陈述:
When(
message__date__gte=one_month_ago,
then=1
)
如果我将1改为1.0,一切都按预期工作。
尽管如此,这对我来说似乎是一个错误,特别是因为我指定了output_field = FloatField(),但即使使用IntegerFields,我认为除法应该返回小数,不应该吗?