2017-10-24 3 views
0

label_rif 속성을 사용하거나 사용하지 않고도 호출 할 수있는 단일보기가 있습니다.이 기반으로 form_class 및 템플릿을 전환 할 수 있습니까?Django : 클래스 기반 뷰 form_class 선택

class LabelCreateView(CreateView): 
    model = models.Label 

    if self.kwargs['label_rif'] > 0: 
     form_class = LabelForm 
     template_name = 'AUTO_form.html' 
    else: 
     form_class = LabelManForm 
     template_name = 'MAN_form.html' 

나는 방법

def get_form_kwargs(self): 
    kwargs = super(LabelCreateView, self).get_form_kwargs() 

    if self.kwargs['label_rif']: 
      form_class = LabelForm 

아니면 다른 별도의 뷰를 정의해야 성공없이 form_class를 삽입하려고했습니다? 나는 그것을 건조하게하고 싶다, 가능하니?

답변

1

당신은 get_form_classget_template_names를 재정 의하여 하나 개의보기에서이 작업을 수행 할 수 있습니다

class LabelCreateView(CreateView): 
    model = models.Label 

    def get_form_class(self): 
     if self.kwargs['label_rif'] > 0: 
      return LabelForm 
     else: 
      return LabelManForm 

    def get_template_names(self): 
     # Note this returns a list, not a string 
     if self.kwargs['label_rif'] > 0: 
      return ['AUTO_form.html'] 
     else: 
      return ['MAN_form.html'] 

당신의 URL 설정에 따라, 나는 두 개의보기가이 경우에 더 많은 읽을 수 있습니다 생각합니다. 다른 속성 만 무시하면되므로 여전히 DRY 상태입니다.

class LabelCreateView(CreateView): 
    model = models.Label 

    form_class = LabelForm 
    template_name = 'AUTO_form.html' 

class ManLabelCreateView(LabelCreateView): 
    form_class = LabelManForm 
    template_name = 'MAN_form.html'