2014-05-14 54 views
0

這是對先前問題的編輯:我認爲重新組合是我在這裏尋找的內容,但邀請任何有關其他方法的建議。我正在嘗試爲多人遊戲(稱爲chouette)生成一個計分應用程序的html表格。典型的計分表最終會看起來像thisDjango - 重新分組的意外輸出

爲了目前的目的,我已經遺漏了「贏/輸」列,這將是一個計算值,稍後我會擔心如何讓位置和分數標題排列在適當的播放器標題下。

在下面的代碼中,我試圖使用重組來輸出顯示第一列遊戲數量的行,然後爲每個遊戲玩家評分和定位。但是,輸出會繼續爲每個遊戲的每個玩家生成新行,如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

問題在於Django admin默認窗體的設置方式,它爲每個分數創建一個新的遊戲PK;改變形式,以便每場比賽只有一個PK。

仍然不確定重組是我的問題的最佳解決方案,因爲它迫使我插入空或空記錄給有一些但不是所有遊戲的分數的玩家,以便讓其他分數顯示在右列下。