无法使用聚合器查询值的总和
Can't query the sum of values using aggregators
我想对按另一个字段分组的所有现有行的值求和。
这是我的模型结构:
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}]
有什么方法可以仅使用查询集过滤来实现这一点吗?
谢谢!
原来我必须通过 Person
而不是 Answer
进行反向过滤,如下所示:
Person.objects.filter(answer__correct=True).annotate(points=Sum('answer__points'))
现在我正确地得到了每个人的总分。
我想对按另一个字段分组的所有现有行的值求和。
这是我的模型结构:
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}]
有什么方法可以仅使用查询集过滤来实现这一点吗?
谢谢!
原来我必须通过 Person
而不是 Answer
进行反向过滤,如下所示:
Person.objects.filter(answer__correct=True).annotate(points=Sum('answer__points'))
现在我正确地得到了每个人的总分。