2012-07-23 40 views
1

我有这样的模式:Django:如何实例化formset中的所有表单?

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 form.What我想要的实例在这一切的形式与“战争”形式:w和“用户”:u。我可以这样做。如果这是不可能的,那么我还有什么其他选择?

回答

1

你想要的是可行的。我不记得现在是否有一些基于类的视图为你自动执行(我想不是),但是你可以手动完成,而不需要太多的努力。

在你的视图后的方法,你有你的formset实例化(看看this)并检查是有效的,你可以iterate over formset's forms,并设置他们的用户和warval你想要的。

另一种选择是将用户和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 

希望它有帮助!

+1

Django文档没有提到实例化 – 2012-07-23 14:14:59

相关问题