创建一个实际上是表单集的自定义Django字段

时间:2018-12-10 18:39:55

标签: python django architecture

我需要做一点复杂的事情,可以这样描述:我需要创建一个包含多个表单(和表单集)的表单,但是此表单的行为应与通常的表单类似,并且我需要保存所有这些表单一个“保存”按钮。 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。

0 个答案:

没有答案