2014-07-08 12 views
8

Ho qualche problema con il mio modulo di password, continua a darmi lo stesso errore: super (tipo, obj) : obj deve essere un'istanza o sottotipo di tipoProblema di modifica della password di Django, super (type, obj): obj deve essere un'istanza o sottotipo di tipo

questo è il mio modulo:

class PasswordChangeForm(forms.Form): 
    current_password = forms.CharField(label=u'Current Password', widget=forms.PasswordInput(render_value=False)) 
    new_password = forms.CharField(label=u'New Password', widget=forms.PasswordInput(render_value=False)) 
    retyped_password = forms.CharField(label=u'Retype New Password', widget=forms.PasswordInput(render_value=False)) 

    def __init__(self, data=None, user=None, *args, **kwargs): 
     self.user = user 
     super(UserProfileEditForm, self).__init__(data=data, *args, **kwargs) 

    def clean_current_password(self): 
     cleaned_data = self.cleaned_data 
     current_password = cleaned_data.get('current_password', '') 

     if not self.user.check_password(current_password): 
      raise ValidationError('Wrong current password.') 

     return current_password 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     new_password = cleaned_data.get('new_password', '') 
     retyped_password = cleaned_data.get('retyped_password', '') 

     if len(new_password) == 0 or len(retyped_password) == 0: 
      raise ValidationError('Blank password fields.') 

     if new_password != retyped_password: 
      raise ValidationError('New password and retyped password do not match.') 

     return cleaned_data 

    def save(self): 
     self.user.set_password(new_password) 
     return self.user 

tutte le idee?

risposta

17

Il tuo problema è in questa linea:

super(UserProfileEditForm, self).__init__(data=data, *args, **kwargs) 

Dovrebbe essere

super(PasswordChangeForm, self).__init__(data=data, *args, **kwargs) 

Si tratta probabilmente di un problema di copia-incolla, quando sono stati copiando dalla altra forma.

Alcuni più context here

+0

Grazie, ho un piccolo problema di più con questo ... non la forma è ok, ma quando chiamo la funzione di risparmio dice il new_passord globale non è deifined – user3803558

+0

Hai bisogno di fare 'new_password = self.cleaned_data.get ('new_password')' – karthikr

Problemi correlati