我有员工加班时间的这个模型
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
分组
答案 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'))
我认为这会对你有帮助。