2017-02-20 21 views
1

有一个模型,它看起来像这样 player_info,游戏,比分,CREATION_DATEDjango的最大和GROUPBY我共同

我想每个玩家的特定游戏的最高分取的记录。

任何帮助表示赞赏。

编辑:

class Game(models.Model): 
    name = models.CharField(max_length=50) 
    description = models.TextField(max_length=1000) 
    logo = models.URLField() 
    resource_info = models.URLField() 
    cost = models.DecimalField(default=0.0, decimal_places=2, max_digits=10) 
    modified_date = models.DateTimeField(auto_now_add=True) 
    developer_info = models.ForeignKey(User, related_name='uploaded_games', on_delete=models.CASCADE) 

class Score(models.Model): 
    game_info = models.ForeignKey(Game, related_name='game_info',on_delete=models.CASCADE) 
    player_info = models.ForeignKey(User, related_name='player_info', on_delete=models.CASCADE) 
    last_played = models.DateTimeField(auto_now=True) 
    score = models.BigIntegerField(default=0) 
+0

你能否提供一些代码?像所有相关领域的相关模型一样?并且还尝试了什么查询/查询。 – JoseKilo

+0

这是我的模型看起来怎么样 类分数(models.Model): game_info = models.ForeignKey(游戏,related_name = 'game_info',on_delete = models.CASCADE) player_info = models.ForeignKey(用户,related_name = 'player_info',on_delete = models.CASCADE) last_played = models.DateTimeField(auto_now =真) 得分= models.BigIntegerField(缺省值= 0) 类游戏(models.Model): 名称= models.CharField(MAX_LENGTH = 50) description = models.TextField(max_length = 1000) resource_info = models.URLField()developer_info = models.ForeignKey(User,related_name ='uploaded_games',on_delete = models.CASCADE) – Coder

回答

0

如果我理解正确:

  • 你想通过GamefilterScore秒。
  • 然后你要GROUP BYUser并获得MAX得分

GROUP BY部分是有点棘手,但可以使用values + annotate实现它。

尝试这样:

from django.db.models import Max 

Score.objects.filter(game_info=...) 
    .values('player_info').annotate(max=Max('score')) 

更多信息的例子:https://docs.djangoproject.com/en/1.10/topics/db/aggregation/