无法使用聚合器查询值的总和

时间:2016-10-07 23:55:09

标签: django django-models django-queryset

我想将另一个字段分组的所有现有行的值相加。

这是我的模型结构:

class Answer(models.Model):
    person = models.ForeignKey(Person)
    points = models.PositiveIntegerField(default=100)
    correct = models.BooleanField(default=False)

class Person(models.Model):
    # irrelevant model fields

示例数据集:

Person | Points
------ | ------
4      | 90
3      | 50
3      | 100
2      | 100
2      | 90

这是我的疑问:

Answer.objects.values('person').filter(correct=True).annotate(points_person=Sum('points'))

结果(您可以看到所有person值都是分开的):

[{'person': 4, 'points_person': 90}, {'person': 3, 'points_person': 50}, {'person': 3, 'points_person': 100}, {'person': 2, 'points_person': 100}, {'person': 2, 'points_person': 90}]

但我想要的是(每个person的点数之和):

[{'person': 4, 'points_person': 90}, {'person': 3, 'points_person': 150}, {'person': 2, 'points_person': 190}]

有没有办法只使用查询集过滤来实现这个目的?

谢谢!

1 个答案:

答案 0 :(得分:0)

原来我必须通过Person而不是Answer进行反向过滤,如下所示:

Person.objects.filter(answer__correct=True).annotate(points=Sum('answer__points'))

现在我正确地得到了每个人的总积分。