2012-07-06 23 views
11

Tengo una página de configuración de perfil donde los usuarios pueden cambiar su contraseña y deben confirmarla si lo hacen. No puedo hacer que este sea un campo obligatorio, ya que NO TIENEN que cambiar la contraseña. ¿Hay algún ejemplo para validar la contraseña de confirmación SI el campo de contraseña no está vacío? Y luego para comprobar si son iguales? Yo no era capaz de encontrar ningún ejemplo de ello ...django confirmar validador de contraseña

Respuesta

24

Agregue lo siguiente al método de su forma clean:

def clean(self): 
    password1 = self.cleaned_data.get('password1') 
    password2 = self.cleaned_data.get('password2') 

    if password1 and password1 != password2: 
     raise forms.ValidationError("Passwords don't match") 

    return self.cleaned_data 

EDITAR

El mensaje de error de validación anterior entrará en non_field_errors. No especificó qué mensaje de error se muestra en cada campo de contraseña, pero según el contexto, me imagino que es un mensaje "Este campo es obligatorio". Si ese es el caso, asegúrese de que sus campos de formulario tienen required=False cuando se defina, o si está trabajando con un formulario subclase (y no puede editar los campos del formulario reales) se puede reemplazar el método de la forma __init__:

class MyForm(SomeOtherForm): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 

     self.fields['password1'].required = False 
     self.fields['password2'].required = False 
+0

Ver texto de arriba. –

+1

Gracias! en realidad lo encontré antes de tu edición. Para referencia de otra persona: https://docs.djangoproject.com/en/dev/ref/forms/validation/ – KVISH

+0

Creo que realmente quiere 'si contraseña1 y contraseña1! = Contraseña2:' de lo contrario, ingrese una contraseña en 'contraseña1' y nada en 'password2' no causará un error de validación (suponiendo que tiene' required = False' en ambos campos, como es probable para un formulario de 'cambio de contraseña') – Anentropic

Cuestiones relacionadas