2016-02-16 3 views
5

In meinem ClassBased-Update überschreiben/erstellen Ansichten Ich habe einige Klassen:Warnung nach 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 

Nach dem Hinzufügen der "get_form" Ich habe die Warnung bekam:

RemovedInDjango110Warning: Index.views.IndexCreateView.get_form Methode muss eine Definition Standardwert für sein form_class Argument.

Wie definiere ich einen Standardwert?

Antwort

1

Fügen Sie die Eigenschaft form_class zu Ihrer Klasse hinzu.

class IndexCreateView(UpdateView): 
    form_class = MyFormClass 
+0

Ich habe im Moment keine FormClass. Aber ich denke, ich werde einen hinzufügen :) danke – spitzbuaamy

+1

Dies wird nur die Warnung stoppen, wenn Sie die 'get_form' Methode entfernen und stattdessen das' form_class' Attribut setzen. Wenn Sie die 'get_form'-Methode beibehalten, müssen Sie einen Standard wie in meiner Antwort festlegen. – Alasdair

+0

Ihre Antwort ist die richtige, @Alasdair –

10

Das form_class Argument ist seit Django 1.8 (release notes) optional gewesen. Die Warnung weist Sie darauf hin, dass Sie ein Standardargument für form_class angeben müssen, z.

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

Wenn man sich die default implementation aussehen, verwendet es None als Standard und fordert self.get_form_class(), wenn es nicht angegeben ist. Da Sie in Ihrer Methode get_form bereits super() aufrufen, sollten Sie auch None als Standard verwenden können.

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

In Ihrem speziellen Fall könnten Sie eine Modellform definieren, die die Widget attrs im __init__ Methode ändert. Dann müssen Sie get_form überhaupt nicht überschreiben.

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') 
Verwandte Themen