我有这个型号:
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中提供上面给定的模型的所有功能?
答案 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)