Попытка найти 5 самых популярных записей

Я пытаюсь найти самого раннего игрока из моего запроса, но у меня возникают проблемы с получением правильных результатов.

Я думал о том, чтобы поместить идентификатор игрока в список, но как вы собираетесь подсчитывать повторяющиеся записи, а затем создавать «топ-5» самых раненых?

Вот мои 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) 

и что у меня до сих пор для моих views.py
РЕДАКТИРОВАТЬ

 def home(request): context={} player_list = [] 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] context['most_injured'] = most_injured context['most_recent'] = most_recent context['news'] = news return render_to_response('dash/home.html', RequestContext(request, context)) 

3 Solutions collect form web for “Попытка найти 5 самых популярных записей”

Почему бы просто не использовать аннотации ?

 from django.db.models import Count Player.objects.annotate(injury_count=Count('playerinjury')).order_by('-injury_count')[:5] 

Если вы используете 2.7, решение с чистым питоном будет

 from collections import Counter inj_counts = Counter() for ip in all_intered_players: inj_counts[ip.player_id] += 1 inj_counts.most_common(5) # gives you a list of top five [(player_id, num_injuries), ...] 

Хотя использование функции аннотации django, вероятно, более целесообразно; тогда в вашей базе данных произойдет тяжелая работа.

Используйте словарь, в котором ключ является именем игрока, а значение является счетчиком того, сколько раз игрок получил травму. Итерируйте свои данные и увеличивайте значение каждой словарной статьи на любом случае травмы.

Они являются основной концепцией использования словаря в этом сценарии:

Ключи уникальны в словаре, а значения могут быть не такими. Значения словаря могут быть любого типа, но ключи должны иметь неизменяемый тип данных, такой как строки, числа или кортежи.

Чтобы получить верхнюю пятерку, вы можете создать список, который является своего рода словарем по значению .

  • Создание раскрывающегося меню идентификаторов пользователей
  • Как исправить предупреждение об отсрочке в Django 1.9
  • request.user в Django
  • Внешний пользовательский интерфейс Django в представлении vs в методе model.save ()
  • Проверка подлинности Django с пользовательской моделью с идентификатором электронной почты как уникальным ключом
  • Как работает класс класса django?
  • Как я могу получить имя пользователя вошедшего в систему пользователя в Django?
  • множественная разбивка на страницы в классе на основе класса django
  • Python - лучший язык программирования в мире.