update tipos personalizados formularios form fields avanzados django django-forms django-validation

personalizados - tipos de formularios en django



ValidaciĆ³n de formulario personalizado (1)

Para validar un solo campo por su cuenta, puede usar un método clean_FIELDNAME () en su formulario, por lo que para el correo electrónico:

def clean_email(self): email = self.cleaned_data[''email''] if User.objects.filter(email=email).exists(): raise ValidationError("Email already exists") return email

luego, para los campos co-dependientes que dependen el uno del otro, puede sobrescribir el método clean() formularios que se ejecuta después de que todos los campos (como el email anterior) hayan sido validados individualmente:

def clean(self): form_data = self.cleaned_data if form_data[''password''] != form_data[''password_repeat'']: self._errors["password"] = ["Password do not match"] # Will raise a error message del form_data[''password''] return form_data

No estoy seguro de dónde obtuvo clean_message() , pero parece que se trata de un método de validación realizado para un campo de message que no parece existir en su formulario.

Lea esto para más detalles:

https://docs.djangoproject.com/en/dev/ref/forms/validation/

Tengo una forma bastante simple:

from django import forms class InitialSignupForm(forms.Form): email = forms.EmailField() password = forms.CharField(max_length=255, widget = forms.PasswordInput) password_repeat = forms.CharField(max_length=255, widget = forms.PasswordInput) def clean_message(self): email = self.clean_data.get(''email'', '''') password = self.clean_data.get(''password'', '''') password_repeat = self.clean_data.get(''password_repeat'', '''') try: User.objects.get(email_address = email) raise forms.ValidationError("Email taken.") except User.DoesNotExist: pass if password != password_repeat: raise forms.ValidationError("The passwords don''t match.")

¿Es así como se realiza la validación de formulario personalizado? Necesito evaluar en el email que actualmente no existen usuarios con esa dirección de correo electrónico. También necesito evaluar esa password y password_repeat coincidencia password_repeat . ¿Cómo puedo hacer esto?