Django 聚合查询和结果总和

Django 聚合查询和结果总和,django,django-models,Django,Django Models,我的模型: 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,并使用聚合结果在查询集中包含一个表达

我的模型:

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实现这一点?

试试以下方法:

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
的结果和各个字段的总和。

aggregate返回一个字典。在得到查询集之后,你不能处理差异吗?我当然可以在得到查询集之后处理它,我只是想在一个语句中完成它。我尝试使用
annotate
而不是
aggregate
,它返回一个查询集,但仍然无法确定如何执行。@akonsu但这将给出总体
diff
。也许你想按什么分组?谢谢。我不需要分组,我需要整体的
SUM
,但我需要每个字段的单独总和,以及同一查询集中表达式
a+b-c-d
的总和。@akonsu查看我的更新答案,并告诉我这是否是您想要的