2013-04-26 7 views
7

Ho creato un modulo personalizzato con la convalida personalizzato come questo:Django come sovrascrivere il metodo clean() in una sottoclasse di modulo personalizzato?

class MyCustomForm(forms.Form): 
    # ... form fields here 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     # ... do some cross-fields validation here 

     return cleaned_data 

Ora, questa forma è una sottoclasse di un'altra forma che ha il suo metodo pulito.
Qual è il modo corretto per attivare entrambi i metodi clean()?
Al momento, questo è quello che faccio:

class SubClassForm(MyCustomForm): 
    # ... additional form fields here 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     # ... do some cross-fields validation for the subclass here 

     # Then call the clean() method of the super class 
     super(SubClassForm, self).clean() 

     # Finally, return the cleaned_data 
     return cleaned_data 

Sembra funzionare. Tuttavia, questo rende due metodi clean() restituiscono cleaned_data che mi sembra un po 'strano.
È questo il modo corretto?

+0

Lo stai facendo correttamente. –

risposta

12

Lo fai bene, ma è necessario caricare cleaned_data dalla chiamata super come questo:

class SubClassForm(MyCustomForm): 
# ... additional form fields here 

def clean(self): 
    # Then call the clean() method of the super class 
    cleaned_data = super(SubClassForm, self).clean() 
    # ... do some cross-fields validation for the subclass 

    # Finally, return the cleaned_data 
    return cleaned_data 
+0

Grazie a @Mounir. Una domanda però: il modo in cui suggerisci, 'clean_data' conterrà i campi della super classe. Devo anche convalidare i campi nella sottoclasse. Come lo faccio? – user1102018

+0

per continuare il mio commento, forse dovrebbe esserci qualcosa del tipo: 'cleaned_sub_data = self.cleaned_data' seguito da' cleaned_data.update (cleaned_sub_data) '. Quindi posso restituire 'cleaned_data' – user1102018

Problemi correlati