【问题标题】:Pre-Populating Model-Formsets With Multiple Model Instances使用多个模型实例预填充模型表单集
【发布时间】:2011-10-25 13:35:31
【问题描述】:

我在学习 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 的多个实例传递到预测模型表单集中,我已经看到了传递一个但想一次性完成的示例。 我还希望用户能够对每个灯具进行一个预测。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    我认为这就是您要寻找的: 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/)

    【讨论】:

    • 使用1.4,我发现仅仅提供initial_data列表是不够的。我还必须在 modelformset_factory 调用中指定足够的 extra 行。
    • +1 表示extra ivar 上的注释。如果您不想在modelformset_factory 中硬编码extra 的数量,我所做的是在调用MyModelFormset() 之前设置MyModelFormset.extra = #extra
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多