Группировка результатов из QuerySet

Я пытаюсь собрать очки каждого футбольного матча в единый список очков команды за весь сезон.

что-то вроде {1,3,3,3,3,1,....}

Моя модель:

class MatchScores(models.Model):
    team = models.ForeignKey(Team, on_delete=models.CASCADE, blank=True) 
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE, blank=True)
    game = models.ForeignKey('game', on_delete=models.CASCADE, blank=True)
    points = models.SmallIntegerField(blank=True, null=True)
    ...

    def __str__(self):
        return str(self.team)
    
    class Meta:
        verbose_name = "Match Scores"




<QuerySet [<MatchScores: Red Team>, <MatchScores: Blue Team>,... >]

Данные, добавленные в модель, расположены не по порядку, например:

Red Team 1 ...
Red Team 3 ...
Blue Team 1 ...
Gren Team 1 ...
Red Team 3...

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

Я пытался

points = MatchScores.objects.filter(profile__user=profile.user)
all_points = []

for team in points:
    if "points" in team:
        all_points.append(team["points"])

но это возвращает TypeError: argument of type MatchScores' is not iterable

Вы не можете итерировать объект, поэтому строка: if "points" in team: недопустима. Чтобы получить поле объекта, вы не рассматриваете его как словарь. Для объектов вы используете .. Измените на следующее:

for team in points:
    if team.points:    # it will be False if points == 0
        all_points.append(team.points)
Вернуться на верх