1

我有这个模型:

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”表单的表单集。我想要的是用“war”:w 和“user”:u 实例化这个表单集中的所有表单。我该怎么做。另外,如果那不可能,那么我还有其他选择吗?

4

1 回答 1

1

你想要的是可能的。我现在不记得是否有一些基于类的视图可以自动为您执行此操作(我认为没有),但是您可以手动执行此操作而无需付出太多努力。

在您的 view post 方法中,在您将 formset 中的表单实例化(看看这个)并检查它是否有效之后,您可以遍历 formset 的 forms,并根据需要设置它们的 user 和 warval。

另一种选择是将 user 和 warval 设置为初始值,因此该表单集中的每个表单都将具有您想要的 user 和 warval。

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

编辑:模型的 clean 方法一样,您可以在表单集的 clean 方法中为您的表单集(或表单集中的表单)添加一些“默认”值。您可以尝试按照以下步骤包含您自己的 clean 方法,然后像这样在您的表单集中实例化每个表单(注意:我没有在我的计算机上尝试这个,但如果我必须这样做,我会这样做):

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

希望能帮助到你!

于 2012-07-23T13:50:41.163 回答