聚合查询和结果总和

时间:2013-06-01 16:10:20

标签: 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,并使用聚合结果在查询集中包含一个表达式:

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来完成?

1 个答案:

答案 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表达式的结果和各个字段的总和。