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,而不是用户
?