2016-02-16 14 views
5

Nel mio Aggiornamento ClassBased/creare viste ho aggiunto alcune classi:avviso dopo sovrascrivendo 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 

Dopo aver aggiunto il "get_form" Ho ricevuto l'avvertimento:

RemovedInDjango110Warning: Index.views.IndexCreateView.get_form metodo deve definire un valore predefinito per l'argomento form_class.

Come definire un valore predefinito?

risposta

1

Aggiungi la proprietà form_class alla tua classe.

class IndexCreateView(UpdateView): 
    form_class = MyFormClass 
+0

al momento non ho una FormClass. Ma penso che ne aggiungerò uno :) grazie – spitzbuaamy

+1

Questo interromperà l'avviso solo se rimuovi il metodo 'get_form' e imposti l'attributo' form_class'. Se mantieni il metodo 'get_form', allora devi impostare un valore predefinito come nella mia risposta. – Alasdair

+0

La tua risposta è quella giusta, @Alasdair –

10

L'argomento form_class è opzionale, dato che Django 1.8 (release notes). L'avviso ti dice che devi specificare un argomento predefinito per form_class, ad es.

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

Se si guarda al default implementation, utilizza None come predefinito, e chiede self.get_form_class() quando non è specificato. Dato che chiami già super() nel tuo metodo get_form, dovresti essere in grado di usare anche None come predefinito.

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

Nel vostro caso specifico, è possibile definire un modello di modulo che cambia il widget attrs nel metodo __init__. Quindi non dovrai affatto sostituire lo 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') 
Problemi correlati