我在https://groups.google.com/forum/#!topic/django-users/ly3ykSVx0B8看到它是一个django问题,但他们在链接资源上建议的解决方案对我的级别来说有点复杂。
基本上,
class Records(models.Model):
task=models.CharField(max_length=10)
unitcost=models.IntegerField()
totalapplied=models.IntegerField()
因此,样本数据是:
Installation 3 30
Moving 4 10
我基本上想要回归
Installation 90
Moving 40
为此,我转向额外的工作:
Records.object.extra(select={'total':'SUM(unitcost * totalapplied)'}).values('task','total')
生成的查询组也在'total'上,生成一个mysql查询。是否有更简单的解决方法可以像类实例一样应用,因为我有类似的模型。
答案 0 :(得分:1)
您可以在这里使用F()表达式:https://docs.djangoproject.com/en/2.0/ref/models/expressions/#f-expressions
并注释: https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#combining-multiple-aggregations
Records.objects.annotate(total=Sum(F('unitcost') * F('totalapplied'))).values('task','total')
提示,你可以看到你的SQL查询:
Records.objects.annotate(total=Sum(F('unitcost') * F('totalapplied'))).values('task','total').query.__str__()