如何逐月从db group中检索数据,如果django中没有某个月的值,则返回零?

时间:2016-12-15 08:02:14

标签: python django

我有一个表事务表,我试过这个,但是它给出了数据库中的事务。

class transactions(models.Model):    
amount=models.FloatField()
ts = models.DateTimeField(null=True)

revenueByMonth = transactions.objects.annotate(month=TruncMonth('ts')).values('month').annotate(c=Sum('amount')).values('month', 'c')

它会给出:

    <[
    {'c': 353.13, 'month': datetime.datetime(2016, 5, 1, 0, 0, tzinfo=<UTC>)}, 
    {'c': 706.26, 'month': datetime.datetime(2016, 8, 1, 0, 0, tzinfo=<UTC>)},
    {'c': 353.13, 'month': datetime.datetime(2016, 9, 1, 0, 0, tzinfo=<UTC>)},
    {'c': 706.26, 'month': datetime.datetime(2016, 10, 1, 0, 0, tzinfo=<UTC>)}, 
    {'c': 353.13, 'month': datetime.datetime(2016, 11, 1, 0, 0, tzinfo=<UTC>)}, 
    {'c': 756.26, 'month': datetime.datetime(2016, 12, 1, 0, 0, tzinfo=<UTC>)}
]>

我想要每个月的金额,如果一个月没有交易那么它应该返回零。所以请帮助我。

1 个答案:

答案 0 :(得分:0)

我不会称之为复制,但Django: Query Group By Month似乎至少为你需要的东西创造了一个基础。这是按月分组。

现在I want sum of amount of each month and if a month have no transaction then it should be return zero您可以查看Coalesce。结合这两个,你应该有你的解决方案。