2013-06-29 115 views
0

我使用以下代码的django松脆形式未提及的字段一个div表单集来封装形式的所有表单字段在一个formset一起在一个div django的酥脆形式:裹每种形式与包括与

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_untioned_fields设置为True。使用此设置,这两个字段至少显示在窗体中,但不会与div中的其余字段一起打包。

我知道我可以手动迭代formset中的表单并用div包装它,这是我一直在做的事情,但是这需要手动处理formset的非形式错误,它通常通过脆皮自动完成。

编辑:根据要求更新了代码。这整个类实际上都包含在一个填充fields_list的工厂方法中,以便我可以动态地只包含某些字段。 ORDER和DELETE被故意排除。它们会自动检测(包括它们导致的错误)并显示在表单中,它们不会被包装在div中。

+0

请在表单类定义中发布所有代码。 –

+0

你是否故意忽略DELETE和ORDER字段? –

+0

根据要求更新。 @BrianDant –

回答

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)