【问题标题】:Django--unexpected output from regroupDjango——重组的意外输出
【发布时间】:2014-05-14 19:15:58
【问题描述】:

这是对较早问题的编辑:我认为重组是我在这里寻找的内容,但请就不同方法提出任何建议。我正在尝试为多人西洋双陆棋游戏(称为 chouette)的计分应用程序生成一个 html 表。典型的记分表最终看起来像 this

出于目前的目的,我省略了“赢/输”列,这将是一个计算值,稍后我会担心如何让 Position 和 Score 标题在 Player 标题下适当地排列。

在下面的代码中,我尝试使用 regroup 来输出显示第一列游戏编号的行,然后为该游戏的每个玩家得分和位置。但是,输出继续为每个游戏的每个玩家生成新行,如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 新手的任何帮助和耐心。

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    问题是 Django admin 中默认表单的设置方式,它为每个分数创建一个新的游戏 pk;改变了形式,使得每场比赛只有一个pk。

    仍然不确定重组是解决我的问题的最佳方法,因为它迫使我为在某些但不是所有游戏中得分的玩家插入 null 或空记录,以使其他得分显示在右栏下方。

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2020-01-24
      • 2013-02-02
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多