2013-12-07 29 views
1
class Game(models.Model): 
    total_players = models.IntegerField(max_length=10) 
    created_on = models.DateTimeField(auto_now_add=True) 
    updated_on = models.DateTimeField(auto_now=True) 

class Players(models.Model): 
    game = models.ForeignKey(Game, related_name='players') 
    name = models.CharField(max_length=10, verbose_name="Player Name") 
    created_on = models.DateTimeField(auto_now_add=True) 
    updated_on = models.DateTimeField(auto_now=True) 

class Score(models.Model): 
    game = models.ForeignKey(Game) 
    name = models.ForeignKey(Players, related_name='scores') 
    score = models.IntegerField(max_length=10) 
    created_on = models.DateTimeField(auto_now_add=True) 
    updated_on = models.DateTimeField(auto_now=True) 

如何用Django模型編寫此查詢?如何編寫Django模型以從多個表中獲取記錄?

select p.name, sum(s.score) as total_score 
from game g, players p, score s 
where g.id=17 and g.id = p.game_id and p.id = s.name_id 
group by p.name 

非常感謝您的幫助提前。

回答

0

我會試試這個,但我不確定是否會適當地過濾每個玩家的分數。我不認爲你們的關係是完全正常化的 - 如果Score對於Players是多對一,並且PlayersGame多對一,則通常不會將game作爲Score上的獨立FK進行跟蹤。每個Players排是否真的只存在於單一遊戲中?

from django.db.models import Sum 
Game.objects.filter(id=17).values(players__name).annotate(total_score=Sum(players__scores_score)) 
+0

是的,我知道關係沒有完全正常化。對於這個db結構,每個玩家只存在於單一遊戲中我正在學習django模型加入和東西,所以我開始作爲1NF/2NF。 https://github.com/patelanuj28/black3_score_board – user1351899

+0

查詢至少是否適合你?規範化通常是一個好主意,但只要你考慮到可能在沒有它的情況下可能引入的模糊性,它就不是必須的。 –

相關問題