2011-10-25 114 views
0

我建立一個足球預測應用程序,同時學習Django和有以下型號:預填充模型表單集具有多個模型實例

class Team(models.Model): 
    Name = models.CharField(max_length=30) 

class Fixture(models.Model): 
    HomeTeam = models.ForeignKey(Team, related_name='HomeTeamRef') 
    AwayTeam = models.ForeignKey(Team, related_name='AwayTeamRef') 
    HomeTeamScore = models.IntegerField(null=True, blank=True) 
    AwayTeamScore = models.IntegerField(null=True, blank=True) 
    Date = models.DateField() 

class Player(models.Model): 
    User = models.ForeignKey(User) 
     DefaultHomeScore = models.IntegerField() 
     DefaultAwayScore = models.IntegerField() 

class Prediction(models.Model): 
    Fixture = models.ForeignKey(Fixture) 
    HomeTeamScore = models.IntegerField() 
    AwayTeamScore = models.IntegerField() 
    Date = models.DateTimeField() 
    Player = models.ForeignKey(Player) 

我有很多固定的物體填充,並用模型表單集是基於預測模型呈現允許用戶輸入分數的視圖。

問題是他們必須選擇與預測相關的夾具。我想預先填充這個,所以他們得到一個燈具列表,只需輸入hometeamscore和awayteamscore。這涉及預測Prediction.Fixture字段和Prediction.Player字段,但我不確定如何去解決這個問題?

任何幫助,非常感謝。

編輯:問題似乎是如何將Fixture的多個實例傳遞到Prediction模型formset中,我已經看到了傳遞一個實例但希望一次完成所有操作的示例。 我也希望用戶能夠對每個燈具進行一次預測。

回答

5

我認爲這是你在找什麼: https://docs.djangoproject.com/en/1.7/topics/forms/formsets/#using-initial-data-with-a-formset

您的代碼將是這個樣子:

initial_data = [] 
for fixture in fixtures: 
    initial_data.append({'Player':player,'Fixture':fixture}) 

formset = MyPredictionFormset(initial=initial_data) 

附:不要迂腐,但你的字段名稱不符合PEP 8標準。他們應該用下劃線小寫,但這是你的電話。 (http://www.python.org/dev/peps/pep-0008/

+2

使用1.4,我發現僅僅提供initial_data列表是不夠的。我還必須在'modelformset_factory'調用中指定足夠多的「額外」行。 – DanH

+0

+1對於'extra' ivar的說明。如果你不想在'modelformset_factory'中硬編碼'extra'的數目,我在做的就是在調用'MyModelFormset()'之前設置'MyModelFormset.extra =#extra'' – Patrick

相關問題