/ / Как така нямам достъп до стойностите на self.cleaned_data в чистата си функция? - джанго, джанго-форми

Защо нямам достъп до ценностите на self.cleaned_data в чистата си функция? - джанго, джанго-форми

Написах чиста функция за моя форма Джанго. Определих OPTIONAL_PASSWORD_INPUT и OPTIONAL_REPEAT_PASSWORD_INPUT горе като поле за въвеждане на парола:

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)

Ако се променя if self.data["username"] and not self.data["password"]: да се if self.cleaned_data["username"] and not self.cleaned_data["password"]:, Джанго произвежда ключова грешка за "потребителско име".

Защо мога да получа достъп до стойности на self.data масив, но не и тези на self.cleaned_data масив в моята чиста функция?

От друга бележка, въпросът дори ли има значение? Мога ли просто да използвам self.data?

Отговори:

0 за отговор № 1

Индивидуалното валидиране и почистване на полето се извършва преди обаждането на form.clean. username се добавя към cleaned_data само ако въведените данни са валидни. Това означава, че трябва да използвате self.cleaned_data.get или проверете дали има грешки self.errors рано в чистата и справедлива гаранция за допълнителното валидиране, което може да не е необходимо, ако отделните полета не са валидни.