我的模特:
class MyModel(models.Model)
a = models.PositiveIntegerField(default=0)
b = models.PositiveIntegerField(default=0)
c = models.PositiveIntegerField(default=0)
d = models.PositiveIntegerField(default=0)
我想在每个字段上计算SUM
,并使用聚合结果在查询集中包含一个表达式:
MyModel.objects.aggregate(a_s=Sum('a'),
b_s=Sum('b'),
c_s=Sum('c'),
d_s=Sum('d')).extra(select={'diff': 'a_s+b_s-c_s-d_s'})
我收到此错误:
'dict' object has no attribute 'extra'
这应该如何使用ORM来完成?
答案 0 :(得分:0)
试试这个:
qs = MyModel.objects.all().extra(select={'diff': 'SUM(a + b) - SUM(c + d)'})
for obj in qs:
print obj.diff
修改强>
result_dict = MyModel.objects.extra(
select={
'diff': 'SUM(a) + SUM(b) - SUM(c) - SUM(d)',
'a_s': 'SUM(a)',
'b_s': 'SUM(b)',
'c_s': 'SUM(c)',
'd_s': 'SUM(d)'
}).values('diff', 'a_s', 'b_s', 'c_s', 'd_s')
这将返回dict
,其中包含a + b - c - d
表达式的结果和各个字段的总和。