1

我正在使用以下代码将表单的所有表单字段包装在一个带有 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 中。

4

1 回答 1

0

正如 Brian Dant 所建议的,如果要将 ORDER 和 DELETE 包含在Layout. 我的问题是我也将它们传递给Meta班级的“领域”。

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.layout.extend(['ORDER', 'DELETE'])
        self.helper.all().wrap_together(Div, css_class="operator-form")

    class Meta:
        model = ApplicationOperator
        fields = tuple(fields_list)
于 2013-07-02T16:59:34.827 回答