/ / ¿Cómo es que no puedo acceder a los valores de self.cleaned_data en mi función de limpieza? - django, django-formas

¿Cómo es que no puedo acceder a los valores de self.cleaned_data en mi función de limpieza? - django, django-formas

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 № 1

La 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.