我正在使用以下代码将表单的所有表单字段包装在一个带有 django 清晰表单的 div 中的表单集中:
class OperatorForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OperatorForm, self).__init__(*args, **kwargs):
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.all().wrap_together(Div, css_class="operator-form")
self.helper.render_unmentioned_fields = True
class Meta:
model = Operator
fields = tuple(fields_list)
使用 'self' 实例化 FormHelper 会自动生成布局,而无需指定所有字段。我需要这个,因为我的字段是动态生成的。问题是 DELETE 和 ORDER 字段没有添加到布局中。所以我将render_un提到的字段设置为True。使用此设置,这两个字段至少会显示在表单中,但不会与 div 中的其余字段一起包装。
我知道我可以手动迭代表单集中的表单并用 div 包装它们,这是我到目前为止一直在做的事情,但这需要手动处理表单集的非表单错误,这通常是自动完成的由脆。
编辑:按要求更新代码。这整个类实际上包装在填充fields_list 的工厂方法中,这样我就可以只动态地包含某些字段。ORDER 和 DELETE 是故意省略的。它们会被自动检测到(包括它们会导致错误)并以表单形式显示,它们根本不包含在 div 中。