Django:如何实例化formset中的所有表单?

时间:2012-07-23 13:35:33

标签: python django forms

我有这个型号:

class option(models.Model):
    warval = models.ForeignKey(war)
    caption = models.CharField(max_length=20)
    text = models.TextField(blank=True,null=True)
    url = models.URLField(blank=True,null=True)
    user = models.ForeignKey(User)

还有以下表格:

class text_option(ModelForm):
    class Meta:
        model = option
        exclude = ('url','warval','user')

class url_option(ModelForm):
    class Meta:
        model = option
        exclude = ('text','warval','user')

假设我创建了一个“text_option”表单的formset。我想要的是用“war”实例化这个formset中的所有表单:w和“user”:u。我怎么能这样做。如果那不是我可以选择其他选项吗?

1 个答案:

答案 0 :(得分:1)

你想要的是可行的。我现在不记得是否有一些基于类的视图自动为你做这些(我认为不是),但是你可以不费吹灰之力地手动完成。

在您的视图发布方法中,在您实例化formset中的表单(查看this)并检查其是否有效后,您可以iterate over formset's forms,并设置其用户和warval为您想。

另一个选项是将user和warval设置为initial values,因此该formset中的每个表单都将具有您想要的用户和warval。

如果你需要一个如何做所有这些事情的例子,我可以尝试添加一些以帮助你,但我认为django文档是最好的方式....

修改model's clean method中一样,您可以在formset的clean方法中为formset(或formset中的表单)添加一些“默认”值。你可以尝试按照this步骤来包含你自己的干净方法,然后像你一样在你的formset中实例化每个表单(注意:我不是在我的计算机上尝试这个,但它是这样的如果我不得不这样做的话:

for form in formset:
    form.instance.user = user
    form.instance.warval = warval

希望它有所帮助!