我需要做一点复杂的事情,可以这样描述:我需要创建一个包含多个表单(和表单集)的表单,但是此表单的行为应与通常的表单类似,并且我需要保存所有这些表单一个“保存”按钮。 django-superform库here中已经实现了类似的操作。 由于限制,我不能只使用一些库并使用它,而是必须自己实现。
我尝试了this方法,但是它确实有效,但从语义上来说确实很脏:我必须将某些对象作为父对象传递给inlineformset_factory,但实际上它们不是该对象的父对象。我只需要给用户一种使用与其他实体相关的不同实体的方法。
因此,我考虑了更通用的方法。我的想法很简单:我创建一个带有字段的表单,而该字段实际上是表单,这些表单中的每一个都有两个字段:一个是默认的Django ModelForm,另一个是默认的Django Formset。
所以我有3个嵌套级别:
class MainForm(forms.Form):
system_1 = SystemOneFormField(prefix='system1')
system_2 = SystemTwoFormField(prefix='system2')
system_3 = SystemThreeFormField(prefix='system3')
class SystemOneFormField(forms.Form):
general_fields = GeneralFormField(prefix='general')
multiple_fields = MultiFields(prefix='multi') # one-to-many
class GeneralFormField(forms.ModelForm):
class Meta:
model = SystemOneGeneralModel
MultiFields = modelformset_factory(model=SystemOneMultiFieldModel)
System2和System3具有相同的想法,并且稍微简单一些,因此我只跳过它们的描述。
问题是:Django可以接受这种方法吗? A看到了验证和子字段初始化的一些问题,并且看起来我必须实现自定义保存和删除方法。我只是不确定是否可以将django表单fork与其他表单或表单集(例如字段)一起使用。
如果重要的话,我使用django 1.6和python 2.7。