2010-05-17 67 views
0

的Django 1.1.1Django的聚合 - 通過使用查詢倉組

Models.py:

class Datapoint(models.Model): 
    parameter1 = models.FloatField() 
    parameter2 = models.FloatField() 

欲倉參數1爲最接近的整數(或者其他四捨五入)的值,然後返回這個bin的兩個參數的平均值。

在SQL我將做到以下幾點:

select round(parameter1,0), 
    avg(parameter1), 
    avg(parameter2) 
from Datapoints 
group by round(parameter1,0) 
order by round(parameter1,0) 

我可以實現在一個Django視圖的查詢集的使用聚合相同,或將它只能通過直接場組?

或者,有沒有辦法將四捨五入的值設置爲模型中的元字段,並在視圖中引用此值?

回答

2

這應該工作:

from django.db.models import Avg 
Datapoint.objects.extra(
    select={'rounded_param1': 'ROUND(parameter1)'} 
).values('rounded_param1').annotate(Avg(parameter1)).annotate(Avg(parameter2)) 

一看從查詢生成的SQL表明,它確實GROUP BY上舍入值。

+0

完美的作品,謝謝! - 我對官方.extra()文檔有點困惑 – meepmeep 2010-05-18 09:34:18