Это редактирование более раннего вопроса: я думаю, что перегруппировка - это то, что я ищу здесь, но предлагаю любые предложения по другому подходу. Я пытаюсь создать html-таблицу для приложения для подсчета очков для многопользовательской игры в нарды (называемой шуэт). Типичный оценочный лист выглядит примерно так: этим.
Для текущих целей я исключил столбец «выигрыш/проигрыш», который будет вычисляемым значением, и позже я буду беспокоиться о том, как сделать так, чтобы заголовки «Позиция» и «Счет» соответствовали заголовкам «Игрок».
В приведенном ниже коде я попытался использовать перегруппировку для вывода строк, показывающих номер игры для первого столбца, а затем счет и позицию для каждого игрока в этой игре. Однако вывод продолжает генерировать новые строки для каждого игрока для каждой игры, как показано здесь. Я заказал игру в представлении, поэтому я не понимаю, почему они не группируются.
Модели:
class Chouette(models.Model):
date = models.DateTimeField()
location = models.CharField(max_length=100)
stake = models.IntegerField()
def __unicode__(self) :
return unicode(self.id)
class Position(models.Model):
POSITION_CHOICES = (
('b', 'b'),
('c', 'c'),
('2', '2'),
('3', '3'),
('4', '4'),
('5', '5'),
('6', '6'),
('7', '7'),
('8', '8'),
)
position = models.CharField(max_length=10, choices=POSITION_CHOICES)
def __unicode__(self) :
return unicode(self.position)
class Player(models.Model):
user = models.OneToOneField(User)
handle = models.CharField(max_length=10)
def __unicode__(self) :
return unicode(self.handle)
class Game(models.Model):
number = models.IntegerField()
chouette = models.ForeignKey(Chouette)
def __unicode__(self) :
return unicode(self.number)
class Score(models.Model):
game = models.ForeignKey(Game)
player = models.ForeignKey(Player)
position = models.ForeignKey(Position)
score = models.IntegerField()
Вид:
from django.shortcuts import render
from chouette.models import Score, Game
#chouette=1
def scores(request):
p_list = Score.objects.filter(game__chouette=1).distinct('player').order_by('player')
s_list = Score.objects.filter(game__chouette=1).order_by('game','player')
return render(request, 'scores.html', {'player_list': p_list, 'score_list': s_list})
Шаблон:
<!doctype html>
<html>
<head></head>
<body>
<table>
<tr>
{% for player in player_list %}
<th>{{ player.player }}</th>
{% endfor %}
</tr><tr>
<th>Game</th>
{% for player in player_list %}
<th>Score</th><th>Position</th>
{% endfor %}
{% regroup score_list by game as list_by_game %}
{% for game in list_by_game %}
<tr><td>{{ game.grouper }}</td>
{% for g in game.list %}
<td>{{ g.score }}</td>
<td>{{ g.position }}</td>
{% endfor %}
{% endfor %}</tr>
</table>
</body>
</html>
Спасибо за любую помощь и за ваше терпение с новичком в Django.