Group results from QuerySet

Question:

I am trying to collect the scores of each football match into a single list of the team points across the season.

something like {1,3,3,3,1,….}

My model is:

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>,... >]

The data added to the model is not in order, for example:

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

So i’m not sure how I collect each point for each team and group it together.

I’ve tried

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

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

but this returns TypeError: argument of type MatchScores' is not iterable

Asked By: JacksWastedLife

||

Answers:

You cannot iterate the object, so the line: if "points" in team: is not valid. To get an object’s field you don’t treat it as it’s dictionary. For objects you use .. Change to this:

for team in points:
    if team.points:    # it will be False if points == 0
        all_points.append(team.points)
Answered By: NixonSparrow
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.