Escribí una función limpia para mi formulario de Django. Yo definí OPTIONAL_PASSWORD_INPUT
y OPTIONAL_REPEAT_PASSWORD_INPUT
arriba como campos de entrada de contraseña:
class addNewMemberForm(SignUpForm):
username = forms.SlugField(required=False,
min_length=MIN_USER_NAME,
max_length=MAX_USER_NAME,
label="Username (optional)",
help_text="If left empty, we will generate a username for you."
)
password = OPTIONAL_PASSWORD_INPUT
password2 = OPTIONAL_REPEAT_PASSWORD_INPUT
def clean(self):
# if user name is filled out, so must be the password field.
if self.data["username"] and not self.data["password"]:
raise forms.ValidationError("If you specify a username, you must specify a password.")
return self.cleaned_data
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields.keyOrder = uniqueify(["username", "email"] + self.fields.keyOrder)
Si cambio if self.data["username"] and not self.data["password"]:
a if self.cleaned_data["username"] and not self.cleaned_data["password"]:
, Django produce un error clave para "nombre de usuario".
¿Por qué es que puedo acceder a los valores de la self.data
matriz, pero no los de la self.cleaned_data
array en mi función de limpieza?
En otra nota, ¿esta pregunta incluso importa? ¿Podría simplemente usar self.data
?
Respuestas
0 para la respuesta № 1La validación y limpieza del campo individual se realiza antes de llamar al form.clean
. username
se agrega a clean_data solo si los datos ingresados eran válidos. Esto significa que deberías usar self.cleaned_data.get
o verificar si hay algún error en self.errors
al principio de su limpieza y simplemente fianza en la validación adicional que podría no ser necesaria si los campos individuales no son válidos.