Как добавить вычисляемые поля в мой ListView в моем универсальном представлении на основе классов? - PullRequest
0 голосов
/ 07 февраля 2019

У меня уже есть рабочий вид и шаблон для отображения статистики моего игрока.Я получаю итоговую сумму выигрыша игрока, затем создаю новую переменную под названием points, затем (Wins * 3) и добавляю это значение в массив.Я передаю этот массив в шаблон и отображаю.

Сейчас я преобразовываю в представление на основе классов, и я не знаю, как рассчитать точки.

Ниже работает отлично:

def players(request):
# descending order player list by points
players = Player.objects.all().order_by('-points')
won = Match.objects.filter(won=True)
lost = Match.objects.filter(won=False)
tie = Match.objects.filter(won=None)

player_stats = []

for player in players:
    print(player.name)
    # print(player.preferredfoot)
    won_matches = len(won.filter(player__name=player.name))
    lost_matches = len(lost.filter(player__name=player.name))
    tie_matches = len(tie.filter(player__name=player.name))
    points = won_matches * 3 + tie_matches
    player_stats.append([player.name, player.preferredfoot, won_matches, tie_matches, lost_matches, points, player.position, player.trait, player.goalsscored, player.assists, player.motmawards])

content = {
    'player_stats': player_stats
}

return render(request, 'manager/players.html', content)

Теперь сПредставление на основе классов: -

 class PlayerListView(ListView):
 model = Player
 template_name = 'manager/players.html'
 context_object_name = 'player_stats' (used by my template)

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

Как добавить эквивалент

    for player in players:
    won_matches = len(won.filter(player__name=player.name))
    won = Match.objects.filter(won=True)
    ...
    points = won_matches * 3

в мой context_object_name 'player_stats'?

Спасибо

...