我有这个型号:
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。我怎么能这样做。如果那不是我可以选择其他选项吗?
答案 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
希望它有所帮助!