2014-10-10 85 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