class Sold(model.Model)
product = models.ForeignKey(Product)
model_name = models.ForeignKey(ProductModels)
sold_date = models.DateField()
model_qty = models.IntegerField()
def __unicode__(self):
return self.sold_date
我想了解2014年1月1日至1月31日期间已售出多少model_qty
:
这是我的疑问:
a = Sold.objects.filter().aggregate(res=Sum('model_qty'))
当我打印时,我得到了a['res'] = 12
,这很好,
现在我使用range
这样:
a = Sold.objects.filter(sold_date__range = ('2014-01-01' , '2014-01-31')).annotate(res=Sum('model_qty'))
a.aggregate(Sum('model_qty'))
我得到了答案。有没有更好的方法来编写此查询?
答案 0 :(得分:1)
您编写的查询在SQL中用类似
的方式表示select sum(model_qty) from sold where sold_date > '2014-01-01' and sold_date < '2014-01-31'
这已经过优化,因为您可能会得到它(除非您可以执行某些特定于数据库的优化),因此您遇到的任何性能问题更可能是由查询数量引起的。
但是,我猜测你实际上没有对它进行分析,或者使用实时数据运行查询来测试性能。在您尝试优化代码之前,我建议您这样做(使用调试工具栏进行报告)。很可能你会发现瓶颈在其他地方。