我对Django有一点问题,我无法解决。 假设我有这样的模型:
class Game(models.Model):
# some attributes here
class Score(models.Model):
user = models.ForeignKey(User)
game = models.ForeignKey(Game)
val = models.IntegerField()
#...
现在,我想在DB中保留上一场比赛的所有得分,但是当我们在页面上显示他们的价值时,我想在每场比赛中只选择所选球员的最佳得分。 我怎么做?或者我可能需要更改分数模型?
答案 0 :(得分:2)
根据您的Django版本,您可以这样做:
from django.db.models import Max
player = User.objects.filter(username='user')
best_score = Score.objects.filter(user=player).aggregate(Max('val'))
答案 1 :(得分:0)
为此,您可以使用Django Max功能
from django.db.models import Max
_user = User.objects.get(...)
_game = Game.objects.get(...)
score = Score.objects.filter(user=_user,game=_game)
max_score = score.aggregate(Max('val'))
答案 2 :(得分:0)
由于您尝试为显示屏执行此操作,我可能会将其设为template filter ...
@register.filter
def highest_score(user, game):
scores = Score.objects.filter(game=game, user=user).order_by("val")
return scores[0]
显然,你需要在那里进行一些错误检查。例如,您需要确保“得分”查询集实际上有结果。
但是,你可以在这样的模板中使用它:
<p>{{ user }}'s top score: {{ user|highest_score:game }}</p>
答案 3 :(得分:0)
我终于找到了解决方案。这与你给我的完全不同,但是感谢你们所有人,因为它让我找到了正确的答案。你回答的只有一个,是所有游戏玩家赢得的最好成绩。每场比赛都与其他比赛不同,所以我必须保留所有比赛。我的交易即将为每场比赛提供最佳分数,并立即归还所有这些价值。
我的解决方案,我希望它做的事情:
user_id = req.GET['user_id']
player = User.objects.get(id__exact=user_id)
scores = score.objects.filter(user=player).values('game').order_by('game').annotate(best=Max('score'))