2013-06-29 3 views
0

장고 바삭한 형태에 언급되지 않은 필드를 포함 사업부와의 formset에서 각 양식 :랩 장고 바삭 형태의 사업부에서 함께 해당 formset에서 양식의 모든 양식 필드를 감싸는 나는 다음과 같은 코드를 사용하고

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_unmentioned_fields를 True로 설정했습니다. 이 설정을 사용하면이 두 필드는 최소한 폼에 표시되지만 div의 나머지 필드로 래핑되지는 않습니다.

나는 수동으로 formset의 양식을 반복하고 div로 감싸는 것을 알고있다. 이것은 지금까지 해왔 던 것이지만, formset의 비 형식 오류를 수동으로 처리해야한다. 일반적으로 싱싱하여 자동으로 수행됩니다.

수정 : 요청 된대로 코드가 업데이트되었습니다. 이 전체 클래스는 fields_list를 채우는 팩토리 메소드에 실제로 래핑되므로 특정 필드 만 동적으로 포함 할 수 있습니다. ORDER 및 DELETE는 목적에 따라 제외됩니다. 그것들은 자동적으로 (에러를 포함한 결과를 포함해서) 탐지되어 형태로 표시되며, 단지 div에 싸여 있지 않습니다.

+0

모든 코드를 양식 정의에 게시하십시오. –

+0

DELETE 및 ORDER 필드를 의도적으로 생략하고 있습니까? –

+0

요청에 따라 업데이트 됨. @BrianDant –

답변

0

Brian Dant가 제안했듯이 ORDER 및 DELETE는 Layout에 포함될 경우 수동으로 추가해야합니다. 내 문제는 클래스의`fields '에 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)