2016-02-16 12 views
5

W moim ClassBased Aktualizacja/tworzenie widoków dodałem kilka klas:ostrzeżenie po nadpisaniu 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 

Po dodaniu "get_form" Dostałem ostrzeżenie:

RemovedInDjango110Warning: Index.views.IndexCreateView.get_form metoda musi zdefiniować wartość domyślna dla jego argumentu form_class.

Jak zdefiniować wartość domyślną?

Odpowiedz

1

Dodaj obiekt form_class do swojej klasy.

class IndexCreateView(UpdateView): 
    form_class = MyFormClass 
+0

w tej chwili nie mam FormClass. Ale myślę, że dodam jeden :) dzięki – spitzbuaamy

+1

Zatrzyma to ostrzeżenie tylko wtedy, gdy usuniesz metodę 'get_form' i zamiast tego ustawisz atrybut' form_class'. Jeśli zachowasz metodę 'get_form', musisz ustawić wartość domyślną, tak jak w mojej odpowiedzi. – Alasdair

+0

Twoja odpowiedź jest poprawna, @Alasdair –

10

form_class argumentem jest opcjonalny, ponieważ Django 1.8 (release notes). Ostrzeżenie informuje cię, że musisz podać domyślny argument dla klasy postaci, np.

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

Jeśli spojrzeć na default implementation, używa None jako domyślny, i wzywa self.get_form_class() gdy nie jest określona. Ponieważ już nazywasz super() w swojej metodzie get_form, powinieneś również móc używać domyślnie None.

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

W Twoim konkretnym przypadku można określić wzoru formularza, który zmienia attrs widgetów w metodzie __init__. Wtedy nie będziesz musiał w ogóle anulować 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') 
Powiązane problemy