使用Django QuerySet获取每月的总值

时间:2014-10-10 17:17:30

标签: django

我有员工加班时间的这个模型

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分组

1 个答案:

答案 0 :(得分: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'))

我认为这会对你有帮助。