2016-02-16 10 views
5

を上書きした後:警告は、私はいくつかのクラスを追加して、私のClassBasedアップデートが作成/閲覧にはget_form

RemovedInDjango110Warning:Index.views.IndexCreateView.get_formメソッドが定義しなければなりません

class IndexUpdateView(UpdateView): 
    fields = '__all__' 
    model = Index 
    template_name = 'index_form.html' 

    def get_success_url(self): 
     return reverse('IndexList') 

    def get_form(self, form_class): 
     form = super(IndexUpdateView, self).get_form(form_class) 
     form.fields['year'].widget.attrs.update({"class": "form-control tosp"}) 
     form.fields['index'].widget.attrs.update({"class": "form-control tosp"}) 
     return form 

"get_form" を追加した後、私は警告を得ましたform_class引数のデフォルト値です。

デフォルト値の定義方法は?

答えて

1

クラスにform_classというプロパティを追加します。

class IndexCreateView(UpdateView): 
    form_class = MyFormClass 
+0

私はFormClassを持っていません。しかし、私は1つを追加すると思います: ありがとう – spitzbuaamy

+1

これは、 'get_form'メソッドを削除し、' form_class'属性を代わりに設定すると警告を止めるだけです。 'get_form'メソッドを保持している場合は、私の答えと同じようにデフォルトを設定する必要があります。 – Alasdair

+0

あなたの答えは正しいです@Alasdair –

10

form_class引数はジャンゴ1.8(release notes)以降オプションとなっています。この警告は、form_classのデフォルト引数を指定する必要があることを伝えています。

def get_form(self, form_class=MyFormClass): 
    ... 

あなたはdefault implementationを見れば、それがデフォルトとしてNone使用し、それが指定されていないときself.get_form_class()を呼び出します。 get_formメソッドですでにsuper()を呼び出しているので、Noneもデフォルトとして使用できるはずです。あなたの特定のケースで

def get_form(self, form_class=None): 
    form = super(IndexUpdateView, self).get_form(form_class) 
    ... 

、あなたは__init__方法でウィジェットattrsに変更をモデルの形を定義することができます。次に、get_formを上書きする必要はありません。

class IndexForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(IndexForm, self).__init__(*args, **kwargs) 
     self.fields['year'].widget.attrs.update({"class": "form-control tosp"}) 
     self.fields['index'].widget.attrs.update({"class": "form-control tosp"}) 

class IndexUpdateView(UpdateView): 
    fields = '__all__' 
    model = Index 
    form_class = IndexForm 
    template_name = 'index_form.html' 

    def get_success_url(self): 
     return reverse('IndexList') 
関連する問題