2017-10-24 9 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を指定挿入しようとしましたか? 私はそれを乾燥状態にしておきたいですか?あなたがget_form_classget_template_namesをオーバーライドすることにより、1つのビューでこれを行うことができます

答えて

1

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の設定に応じて、私は2つのビューは、この場合は、より読みやすいかもしれないと思います。異なる属性を上書きするだけで済みますので、まだ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' 
関連する問題