2012-05-11 92 views
-1

要開始使用Django,我使用它爲我的壘球隊建立一個小網站,我們可以列出每個球員的統計數據。對於模型,我定義了兩個表格 - 玩家和Statline,Statline中的玩家是外鍵。如何打印出一個在Django中訪問2個表格的HTML表格?

class Player(models.Model): 
    name = models.CharField(max_length=32) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 
    bats = models.CharField(max_length=1, choices=HANDED_CHOICES) 
    throws = models.CharField(max_length=1, choices=HANDED_CHOICES) 
    position = models.CharField(max_length=2, choices=POSITION_CHOICES) 
    pitches = models.CharField(max_length=1, choices=PITCHES_CHOICES) 
    hometown = models.CharField(max_length=32) 

    def __unicode__(self): 
     return self.name 

class StatLine(models.Model): 
    season_name = models.CharField(max_length=12, choices=SEASON_CHOICES) 
    player = models.ForeignKey(Player) 
    at_bats = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    singles = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    doubles = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    triples = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    homeruns = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    runs = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    rbis = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 
    rboe = models.IntegerField(max_length=2, choices=NUMBER_CHOICES, default=0) 

我正在做的是做一個查詢,我總結了每個玩家的所有統計數據,並按玩家分組。這樣我就可以統計每個賽季的所有數據。在SQL中,當我使用PHP構建站點時,它是:

FROM Stats 
INNER JOIN Players ON Players.player_id = Stats.player_id 
WHERE season_name = 'Spring 2012' 
GROUP BY Players.player_name 

我對如何使用Django執行相同的查詢感到困惑。任何幫助將非常感激!

回答

1

Django's documentation about aggregation應該足夠了。

我不知道你爲什麼按player_name分組,因爲你沒有說明你想要選擇哪些字段,以及是否應該在某個地方進行聚合。單個Player可能有多個StatLine對象嗎?

如果你希望某個賽季的所有本壘打做個總結每個球員,你可以使用這個片段:

from django.db.models import Sum 
Player.objects.filter(
     statline__season_name="Spring 2012" 
    ).annotate(
     sum_homeruns=Sum(statline__homeruns), 
     sum_abats=Sum(statline__abats), 
     sum_singles=Sum(statline__singl‌​es), 
     […] 
) 

由於stated in the docsfilter()annotate()的順序是非常重要的。

+0

好吧,幫助噸。我會給它一個鏡頭。目的是獲得像棒球卡背面通常顯示的統計數據:球員姓名,命中,單打,雙打等 - 對於給定的賽季。 –

+0

好吧,我仍然卡住了。我已經通讀了所有的文檔,但我仍然遇到了創建我需要的查詢的問題。根據第一個問題 - 是的,所有的統計數據都可以被認爲是個人遊戲的統計數據。所以對於我想要製作的表格,它需要將給定玩家的所有統計信息加起來。所以查詢應該由玩家過濾,然後得到每個其他statline列的總和。我可以鏈接登錄信息.annotate(sum_abats = Sum(statline__abats).annontate(sum_singles = Sum(statline_singles)...? –

+0

是的,你可以添加多個註釋,看看我上面的修改示例 – jnns