2014-10-10 83 views
2

获得每个月的总价值我有这个型号为员工加班时间使用Django的QuerySet

class Overtime(IncomeBase): 
    day = models.DateField(verbose_name="Date") 
    value = models.FloatField(default=1) 

我需要提取每个月的总价值。现在我在管理器中使用每日QuerySet。

class OvertimeManager(models.Manager): 

    def daily_report(self): 
     return self.values('day').annotate(hours=models.Sum('value')).order_by('-day') 

但是现在我需要月度报告,将得到的value的总和每月。 我试图先提取月份,但后来我失去了值。

注:一个月不应该对所有年份的总和,所以特地我需要按month,year

回答

2

如果你使用PostgreSQL,你可以做到这一点。 Ofc也有类似的功能。

Overtime.objects.extra({'month': "to_char(day, 'Mon')", "year": "extract(year from day)"}).values('month', 'year').annotate(Sum('value')) 

更多信息: http://www.postgresql.org/docs/7.4/static/functions-formatting.html http://www.postgresql.org/docs/9.1/static/functions-datetime.html

或者Django的方式:

from django.db import connection 

truncate_month = connection.ops.date_trunc_sql('month','day') 
Overtime.objects.extra({'month': truncate_month}).values('month').annotate(Sum('value')) 

我认为这会帮助你。

+0

其他任何不需要特定数据库的方法? – Othman 2014-10-10 19:44:39

+0

@Othman我更新了答案。查看 ;) – 2014-10-10 21:22:58