Django-对于每个对象,属于同一FK的和相关字段

Django-对于每个对象,属于同一FK的和相关字段,django,django-rest-framework,Django,Django Rest Framework,因此,我试图得到与相应球员相关的所有比赛中的每个得分总和,以及他参加了多少场比赛 class Player(models.Model): name = models.CharField() class Game(models.Model): points = models.IntegerField() user = models.ForeignKey(User, on_delete=models.CASCADE) 我期望的输出是: { "name": "

因此,我试图得到与相应球员相关的所有比赛中的每个得分总和,以及他参加了多少场比赛

class Player(models.Model):
     name = models.CharField()

class Game(models.Model):
     points = models.IntegerField()
     user = models.ForeignKey(User, on_delete=models.CASCADE)
我期望的输出是:

{
    "name": "asdf",
    "total_points": "9999"
    "games_played": "12"
}
我想我可以得到一个球员的价值清单,然后查看所有比赛的总和,并计算清单上每个价值的比赛,但我不知道怎么做

我知道如何为一个特定的球员做这件事,但我想得到完整的名单。我认为这是一个循环,每个玩家都有自己的计数


谢谢

假设
播放器
有一个
用户
存储为
.User
,您可以执行以下操作:

from django.db.models import Sum

games = Game.objects.filter(user=player.user)
output = {
    'name': player.name,
    'total_points': games.aggregate(Sum('points')),
    'total_games': games.count()
}

您的
models.py
似乎不完整,因此我假设
Player
Game
之间存在FK关系,如下所示

class Player(models.Model):
    name = models.CharField(max_length=200)


class Game(models.Model):
    points = models.IntegerField()
    user = models.ForeignKey(Player, on_delete=models.CASCADE)

您可以使用下面的
groupby
查询获取数据库的所有摘要,

from django.db.models import Count, Sum, F

Game.objects.annotate(name=F('user__name')).values('name').annotate(games_played=Count('id'), total_points=Sum('points'))


示例输出将如下所示,

 <QuerySet [{'name': 'name_1', 'games_played': 2, 'total_points': 6}, {'name': 'name_2', 'games_played': 1, 'total_points': 2}]>
{'name': 'name_1', 'games_played': 2, 'total_points': 6}

游戏。用户
应该是
玩家
的FK,而不是
用户