/ / Dlaczego nie mogę uzyskać dostępu do wartości self.cleaned_data w mojej funkcji clean? - django, django-forms

Dlaczego nie mogę uzyskać dostępu do wartości self.cleaned_data w mojej funkcji clean? - django, django-forms

Napisałem czystą funkcję dla mojego formularza Django. Zdefiniowałem OPTIONAL_PASSWORD_INPUT i OPTIONAL_REPEAT_PASSWORD_INPUT powyżej jako pola wprowadzania hasł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)

Jeśli się zmienię if self.data["username"] and not self.data["password"]: do if self.cleaned_data["username"] and not self.cleaned_data["password"]:, Django generuje kluczowy błąd dla "nazwy użytkownika".

Dlaczego mogę uzyskać dostęp do wartości self.data array, ale nie te z self.cleaned_data tablica w mojej funkcji czyszczenia?

Z drugiej strony, czy to pytanie ma znaczenie? Czy mogę po prostu użyć self.data?

Odpowiedzi:

0 dla odpowiedzi № 1

Poszczególne sprawdzanie i czyszczenie pól odbywa się przed wywołaniem form.clean. username jest dodawany do clean_data tylko wtedy, gdy wprowadzone dane są poprawne. Oznacza to, że powinieneś użyć self.cleaned_data.get lub sprawdź, czy są jakieś błędy self.errors wcześnie w twojej czystej i sprawiedliwej kaucji na dodatkowej walidacji, która może nie być konieczna, jeśli poszczególne pola nie są ważne.