2011-10-25 52 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