2016-10-07 1 views
0

Я хочу суммировать значения всех существующих группировок строк другим полем.Невозможно запросить сумму значений с помощью агрегаторов

Вот моя модель структуры:

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}] 

Есть ли способ для достижения этой цели, используя только QuerySet фильтрацию?

Спасибо!

ответ

0

Оказывается, я должен был сделать обратную фильтрацию, по Person-х, а не Answer с, например, так:

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

Теперь я получаю общее суммируются баллы для каждого человека правильно.