2012-01-24 4 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

Когда действительно, я должно оно должно отображаться как:
- Игрок A
- Игрок B

Из-за тот игрок А был болен более игрок 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. Это точный код, который я дал ему использовать в своем ответе. Не уверен, почему он решил изменить его, но вам нелегко получить очки за то, что он предоставил информацию об ОП, которую он уже имел, прежде чем он задал вопрос. ;) –

+0

Eeech, чувствует себя грязным, ха-ха. Вероятно, я должен был проверить предыдущий пост перед тем, как обратиться к этому. Похоже, Юджи и я тоже были шеей и шеей. Его ответ, вероятно, даже лучше, поскольку он включает некоторое объяснение, почему изменение вашего ответа было плохим. – aganders3

+0

@ aganders3, это было смешно! Первый раз я видел «только сейчас» дважды. –

1

Вы запрашиваете отдельные PlayerInjury объекты, поэтому, конечно, у вас есть несколько игроков в ваших результатах.

Если вы Count от id, вы всегда получите счетчик, так как на один идентификатор всего 1 объект.

Если вы хотите объекты игрока заказанных травм, вам нужно

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