2012-05-31 3 views
0

Я написал чистую функцию для своей формы Django. Я определил OPTIONAL_PASSWORD_INPUT и OPTIONAL_REPEAT_PASSWORD_INPUT выше в качестве пароля поля ввода:Почему я не могу получить доступ к значениям self.cleaned_data в моей чистой функции?

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"]:, Django производит ключевую ошибку для «имени пользователя.»

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

С другой стороны, этот вопрос даже имеет значение? Могу ли я просто использовать self.data?

ответ

0

Проверка и очистка отдельных полей выполняется до вызова form.clean. username добавляется к cleaned_data только в том случае, если введенные данные действительны. Это означает, что вы должны либо использовать self.cleaned_data.get, либо проверить, есть ли какие-либо ошибки на self.errors на ранней стадии вашей чистой и простой залог при дополнительной проверке, которая может не понадобиться, если отдельные поля недействительны.

Смежные вопросы