Django:如何使用modelform,formset,model formset来实现以下场景?

时间:2012-07-23 04:56:30

标签: javascript python django

我有这个型号:

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')
    def clean_url(self):
            #processing...

我希望我的用户可以根据需要创建任意数量的选项。所以我的选项是使用“formset”。 但是如何使用“war”实例(“war”是一个模型)实例化formset中的所有表单。还有如何在我的formset中提供上面给定的模型的所有功能?

1 个答案:

答案 0 :(得分:0)

您可以通过url显式传递war实例的ID,例如http://myserver/add_options/1 1的ID为war,并在视图中使用它来更新外键适当的选择领域。

另一个选项是在表单中将id作为隐式/隐藏输入字段传递,并使用该id在视图中标识war实例。

另一方面,您可以利用继承来简化模型定义。 像:

class base_option(models.Model):
    warval = models.ForeignKey(war)
    caption = models.CharField(max_length=20)
    user = models.ForeignKey(User)

class text_option(base_option):
    text = models.TextField(blank=True,null=True)

class url_option(base_option):
    url = models.URLField(blank=True,null=True)