2016-04-09 29 views
0

我有一個Django 1.9 queryset的QS到我添加了以下注釋:Django的註釋F()/ F() 「輪」 意外

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')) 

古怪,結果似乎被向下取整(如數學.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升級到1.9的Django後發生的情況。

我做錯了什麼或者是一個錯誤?

提前致謝!

+1

你可以在你的'Case'表達式中充實... ...嗎? – lac

回答

0

好吧,發現由於LAC的評論的問題:

機殼內(...)我有這樣的語句:

When(
    message__date__gte=one_month_ago, 
    then=1 
    ) 

如果我改變了1到1.0的一切工作按預期。

不過,這看起來像是一個bug,特別是因爲我指定了output_field = FloatField(),但即使使用IntegerFields,我相信除法應該返回小數,不是嗎?