Django注释F()/ F()"轮次"不料

时间:2016-04-09 14:55:40

标签: python django django-orm annotate

我有一个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之后。

我做错了什么还是错误?

提前致谢!

1 个答案:

答案 0 :(得分:0)

好的,感谢lac的评论发现了这个问题:

在案例中(...)我有这样的陈述:

When(
    message__date__gte=one_month_ago,
    then=1
    )

如果我将1改为1.0,一切都按预期工作。

尽管如此,这对我来说似乎是一个错误,特别是因为我指定了output_field = FloatField(),但即使使用IntegerFields,我认为除法应该返回小数,不应该吗?