2013-06-29 91 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)