Foros del Web » Programando para Internet » Python »

Cambiar password en vista de edición de usuario

Estas en el tema de Cambiar password en vista de edición de usuario en el foro de Python en Foros del Web. Hola ^_^ bueno, estoy tratando de extender el modelo predeterminado de usuario que tiene django, lo cual ya he logrado en gran medida, ahora, sucede ...
  #1 (permalink)  
Antiguo 16/04/2014, 21:51
Avatar de Kristhoff  
Fecha de Ingreso: abril-2009
Ubicación: Popayán - Cauca
Mensajes: 550
Antigüedad: 14 años, 11 meses
Puntos: 12
Información Cambiar password en vista de edición de usuario

Hola ^_^
bueno, estoy tratando de extender el modelo predeterminado de usuario que tiene django, lo cual ya he logrado en gran medida, ahora, sucede que quiero hacer que el superuser sea capaz de cambiar el password de un usuario desde la aplicación de admin. Siendo más específico, que el campo se muestre vacío en el formulario de modificación de usuario y que si se deja vacío no se modifique el que ya tiene, pero dado el caso en que se proporcione uno nuevo, este reemplace al que ya tiene el usuario.
En el momento soy capaz mostrar el campo, pero me sale con el password hasheado.
Me preguntaba si existe algún método/función "save" como el formulario de registro que haga lo que deseo...

Mi formulario de modificación de usuario
Código Python:
Ver original
  1. class FormularioModificacionUsuario(forms.ModelForm):
  2.     # Hay alguna función/método parecido a esto?
  3.     '''
  4.    def save(self, commit=True):
  5.        if password:
  6.            # establece el nuevo password
  7.        else:
  8.            # no modifica el password anterior
  9.    '''
  10.  
  11.     class Meta:
  12.         model = Usuario
  13.         fields = ('cedula', 'username', 'nombres', 'apellidos', 'direccion', 'email', 'password', 'is_active', 'is_staff',)
  14.    
  15.     def clean_password(self):
  16.         return self.initial['password']

Mi formulario de registro de usuario...
Código Python:
Ver original
  1. class FormularioRegistroUsuario(forms.ModelForm):
  2.     password1 = forms.CharField(label='Contraseña', widget=forms.PasswordInput)
  3.     password2 = forms.CharField(label='Confirmar contraseña', widget=forms.PasswordInput)
  4.    
  5.     class Meta:
  6.         model = Usuario
  7.         fields = ('cedula', 'username', 'nombres', 'apellidos', 'direccion', 'email')
  8.    
  9.     def clean_password2(self):
  10.         password1 = self.cleaned_data.get('password1')
  11.         password2 = self.cleaned_data.get('password2')
  12.         if password1 and password2 and password1 != password2:
  13.             raise forms.ValidationError('Las contraseñas no coinciden')
  14.         return password2
  15.    
  16.     def save(self, commit=True):
  17.         usuario = super(FormularioRegistroUsuario, self).save(commit=False)
  18.         usuario.set_password(self.cleaned_data['password2'])
  19.         if commit:
  20.             usuario.save()
  21.         return usuario

Edito:
Resulta que "parece" que si se puede, agregué esto:
Código Python:
Ver original
  1. def clean_password2(self):
  2.         password1 = self.cleaned_data.get('password1')
  3.         password2 = self.cleaned_data.get('password2')
  4.         if password1 and password2 and password1 != password2:
  5.             raise forms.ValidationError('Las contraseñas no coinciden')
  6.         return password2
  7.    
  8.     def save(self, commit=True):
  9.         usuario = Usuario.objects.get(cedula=self.cleaned_data['cedula'])
  10.         if self.cleaned_data['password2']:
  11.             usuario.set_password(self.cleaned_data['password2'])
  12.         #..aquí las demás asignaciones a usuario...
  13.         usuario.save()
pero al momento de guardar me sale un error que dice que el objeto no tiene atributo save (cosa que es mentira :p ya que imprimí por consola dir(usuario) y si lo tiene. Alguna idea? :)
__________________
"I need metal in my life, just like an eagle needs to fly..."

Última edición por Kristhoff; 17/04/2014 a las 00:01 Razón: Más info

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:56.