设Sum()返回0而不是

时间:2015-09-09 10:17:10

标签: python django

我尝试使用djangos orm执行查询,该查询返回某个部分在特定时间段内使用的许可证数量。 我使用django 1.8.3和python 2.7.6以及mysql作为数据库。

我的查询与此类似:

beg = datetime.date(2015, 9, 1)
end = datetime.date(2015, 9, 9)
LicenseUsage.objects.all().filter(datestamp__range=[beg, end])\
                          .values('datestamp')\
                          .filter(groupid__in=[301, 274, 155, 186])\
                          .filter(poolid=301)\
                          .annotate(used=Sum('usedamount'))\
                          .order_by('datestamp')

结果包含datestamp和usedamount

[{'datestamp': datetime.date(2015, 9, 1), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 2), 'used': 1},
 {'datestamp': datetime.date(2015, 9, 3), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 4), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 5), 'used': 1}, 
 {'datestamp': datetime.date(2015, 9, 7), 'used': 2}, # <-- where is the 6.?
 {'datestamp': datetime.date(2015, 9, 8), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 9), 'used': 1}])

我的问题是,如果某个部分在某一天没有使用许可证,我的查询也不会返回任何内容。 即我的结果中的2015年9月6日。

我想预先形成一个返回

的查询
[{'datestamp': datetime.date(2015, 9, 1), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 2), 'used': 1},
 {'datestamp': datetime.date(2015, 9, 3), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 4), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 5), 'used': 1},
 {'datestamp': datetime.date(2015, 9, 6), 'used': 0}, # <--- This is what i want
 {'datestamp': datetime.date(2015, 9, 7), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 8), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 9), 'used': 1}])    

我尝试过Coalesce

LicenseUsage.objects.all().filter(datestamp__range=[beg, end])\
                          .values('datestamp')\
                          .filter(groupid__in=[301, 274, 155, 186])\
                          .filter(poolid=301)\
                          .annotate(used=Coalesce(Sum('usedamount'), V(0)))\
                          .order_by('datestamp')

但结果是一样的,似乎我没有做对。 有人知道djangos orm是否可以进行这种查询,是否有可能如何解决? 会感激一些帮助,因为这让我疯了。

提前致谢。

BigZ

0 个答案:

没有答案