2012-12-10 177 views
5

我有一個模型,我使用Django ORM從表中提取Avg值。我想Round that Avg值,我該怎麼做?Django ORM如何取整Avg結果

請參閱下面我正在從格式爲YYYY-MM的按日期分組的價格模型中提取平均價格,我想自動提取四捨五入到最接近的數字的平均值。

rs = Prices.objects.all.extra(select={ 
    'for_date': 'CONCAT(CONCAT(extract(YEAR from for_date), "-"), 
     LPAD(extract(MONTH from for_date), 2, "00"))' 
    }).values('for_date').annotate(price=Avg('price')).order_by('-for_date') 
+1

我不覺得對Django的查詢集API參考圓的功能,爲什麼不使用python原有的圓()來舍入返回的結果? – jxs

+0

你有沒有偶然的工作? –

回答

16

使用Func() expressions(因爲1.8可用)。

下面是一個使用Book模型從Django Aggregation topic guide一個例子四捨五入至小數點後兩位SQLite中:

class Round(Func): 
    function = 'ROUND' 
    template='%(function)s(%(expressions)s, 2)' 

Book.objects.all().aggregate(Round(Avg('price'))) 
+0

根據您的註釋或聚合的複雜程度,您可能需要分配別名。 例如()()()()()() – Duncan