我想将另一个字段分组的所有现有行的值相加。
这是我的模型结构:
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}]
有没有办法只使用查询集过滤来实现这个目的?
谢谢!
答案 0 :(得分:0)
原来我必须通过Person
而不是Answer
进行反向过滤,如下所示:
Person.objects.filter(answer__correct=True).annotate(points=Sum('answer__points'))
现在我正确地得到了每个人的总积分。