我有一个像这样的简单模型:class Order(models.Model): created = model.DateTimeField(auto_now_add=True) total = models.IntegerField() # monetary value我想逐个输出:一个月有多少销售额(COUNT)合并值(SUM)我不确定攻击它的最佳方法是什么。我已经看到了一些相当可怕的额外选择查询,但我简单的想法告诉我,我可能会更好的只是迭代数字,从任意的开始年/月开始计算直到我到达当前月份,抛弃简单查询过滤该月份。更多数据库工作 - 减少开发人员的压什么对你最有意义?有没有一种很好的方法可以撤回快速的数据表?或者我的脏方法可能是最好的主意?我正在使用Django 1.3。不确定他们最近是否添加了更好的方式GROUP_BY。
3 回答
UYOU
TA贡献1878条经验 获得超4个赞
另一种方法是使用ExtractMonth。由于只返回了一个日期时间年值,因此使用TruncMonth遇到了麻烦。例如,仅返回2009年的月份。ExtractMonth完美地解决了这个问题,可以像下面这样使用:
from django.db.models.functions import ExtractMonth
Sales.objects
.annotate(month=ExtractMonth('timestamp'))
.values('month')
.annotate(count=Count('id'))
.values('month', 'count')
- 3 回答
- 0 关注
- 2037 浏览
添加回答
举报
0/150
提交
取消