2012-01-24 58 views
1

我问了question这个关于注释的问题,以找到前5名最受伤的玩家,但现在我遇到了显示正确信息的问题,我想它应该是它自己的问题。注解不能正常显示/正常工作

这是我目前的看法:

def home(request): 
    context={} 
    most_recent = PlayerInjury.objects.all().order_by('-timestamp')[:5] 
    news = News.objects.all() 
    most_injured = PlayerInjury.objects.annotate(injury_count=Count('id')).order_by('-injury_count')[:5] 
    print most_injured 
    context['most_injured'] = most_injured 
    context['most_recent'] = most_recent 
    context['news'] = news 
    return render_to_response('dash/home.html', RequestContext(request, context)) 

models.py

class PlayerInjury(models.Model): 
    player = models.ForeignKey(Player) 
    injury_type = models.ForeignKey(Injury) 
    injury_date = models.DateField(verbose_name='Injured On', null=True, blank=True) 
    description = models.CharField(verbose_name='Description', max_length=180, null=True, blank=True) 
    status = models.ForeignKey(Status) 
    projected_return = models.DateField(verbose_name='Projected Return Date', null=True, blank=True) 
    hide = models.BooleanField(default=False) 
    returned = models.BooleanField(default=False) 
    timestamp = models.DateTimeField(auto_now_add=True) 

class Player(models.Model): 
    first_name = models.CharField(verbose_name='First Name', max_length=30, null=True, blank=True) 
    last_name = models.CharField(verbose_name='Last Name', max_length=30, null=True, blank=True) 
    team = models.ForeignKey(Team, related_name='Team played for') 
    pob = models.CharField(verbose_name='Place of Birth', max_length=100, null=True, blank=True) 
    dob = models.DateField() 
    age = models.IntegerField(null=True, blank=True) 
    height = models.CharField(verbose_name='Height', max_length=10, null=True, blank=True) 
    weight = models.CharField(verbose_name='Weight', max_length=10, null=True, blank=True) 
    drafted_by = models.ForeignKey(Team, related_name='drafted by') 

然而,当我打印出来most_injured我得到:
- 玩家A
- 玩家B
- 球员A

当真的,我th应该应该显示如下:
- 玩家A
- 玩家B

由于这一事实,玩家A已经伤害了更多的则玩家B

有什么建议?

我认为这是它应该如何工作。
- 玩家A(2伤)
- 玩家B(1伤)
- 等

+0

请发表您的机型。 – aganders3

+0

添加my models.py – TheLifeOfSteve

+0

你的'Player'模型是什么样的? – aganders3

回答

1

尝试这样做,而不是:

most_injured = Player.objects.annotate(injury_count=Count('playerinjury')).order_by('-injury_count')[:5] 
+0

ROFL。这是我给他在我的答案中使用的确切代码。不知道他为什么决定改变它,但为了获得积分给他提供他已经拥有的OP信息之前他问这个问题,我很荣幸。 ;) –

+0

Eeech,感觉很脏,哈哈。在处理这个问题之前,我应该可能已经检查了以前的帖子。看起来Yuji和我也是脖子上的。他的回答可能更好,甚至包括一些关于为什么改变你的答案是一个坏主意的解释。 – aganders3

+0

@ aganders3,这很有趣!我第一次看到“刚才”两次。 –

1

要查询个人PlayerInjury对象,所以你当然有你的结果中有多个玩家。

如果你Countid,你总是会得到一个计数,因为每个ID只有一个对象。

如果您想通过伤害下令球员的对象,你需要

Player.objects.annotate(count=Count('playerinjury')).order_by('-count')