这是对早期问题的编辑:我认为重新组合是我在这里寻找的,但邀请任何建议采用不同的方法。我正在尝试为多人 - 步步高游戏(称为chouette)的得分应用程序生成一个html表。典型的评分表最终会看起来像this。
就目前而言,我已经省去了胜利/失败"列,这将是一个计算值,我稍后会担心如何让位置和分数标题在播放器标题下排成一行。
在下面的代码中,我尝试使用重新组合输出显示第一列游戏编号的行,然后为该游戏的每个玩家分数和位置。但是,输出会继续为每个游戏为每个游戏生成新行,如here所示。我在视图中按游戏订购,所以我不明白他们为什么不进行分组。
型号:
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新手的耐心。
答案 0 :(得分:0)
问题在于Django管理员的默认表单设置方式,它为每个分数创建了一个新游戏pk;改变形式,使每场比赛只有一个PK。
仍然不确定重新组合是我问题的最佳解决方案,因为它迫使我为有一些但不是所有游戏得分的玩家插入空或空记录,以便在右栏下显示其他分数。