Django - 如何在col中选择唯一值

时间:2011-05-17 13:22:02

标签: django select model models

我对Django有一点问题,我无法解决。 假设我有这样的模型:

class Game(models.Model):
# some attributes here

class Score(models.Model):
user = models.ForeignKey(User)
game = models.ForeignKey(Game)
val = models.IntegerField()
#...

现在,我想在DB中保留上一场比赛的所有得分,但是当我们在页面上显示他们的价值时,我想在每场比赛中只选择所选球员的最佳得分。 我怎么做?或者我可能需要更改分数模型?

4 个答案:

答案 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'))