/ / Wie kann ich auf Werte von self.cleaned_data in meiner sauberen Funktion nicht zugreifen? - Django, Django-Formen

Warum kann ich nicht auf Werte von self.cleaned_data in meiner sauberen Funktion zugreifen? - Django, Django-Formen

Ich habe eine saubere Funktion für meine Django-Form geschrieben. Ich habe es definiert OPTIONAL_PASSWORD_INPUT und OPTIONAL_REPEAT_PASSWORD_INPUT oben als Passwort Eingabefelder:

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)

Wenn ich mich ändere if self.data["username"] and not self.data["password"]: zu if self.cleaned_data["username"] and not self.cleaned_data["password"]:, Django erzeugt einen Schlüsselfehler für "Benutzername".

Warum kann ich auf die Werte der self.data Array, aber nicht die der self.cleaned_data Array in meiner sauberen Funktion?

Oder ist diese Frage überhaupt wichtig? Könnte ich einfach benutzen self.data?

Antworten:

0 für die Antwort № 1

Die Validierung und Reinigung der einzelnen Felder erfolgt vor dem Aufruf des form.clean. username wird nur dann zu den bereinigten_Daten hinzugefügt, wenn die eingegebenen Daten gültig waren. Dies bedeutet, dass Sie entweder verwenden sollten self.cleaned_data.get oder prüfen Sie, ob Fehler aufgetreten sind self.errors früh in Ihrem sauber und nur gegen die zusätzliche Validierung, die nicht notwendig sein, wenn die einzelnen Felder nicht gültig sind.