Группировка результатов из 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)