0

Django フォームのクリーンな関数を作成しました。以上をパスワード入力フィールドとして定義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"]:、Django は「ユーザー名」のキー エラーを生成します。

clean 関数で配列の値にアクセスできるのに、self.data配列の値にアクセスできないのはなぜですか?self.cleaned_data

別の注意として、この質問は重要ですか? 私はちょうど使用できますself.dataか?

4

1 に答える 1

0

個々のフィールドの検証とクリーニングは、を呼び出す前に実行されform.cleanます。username入力されたデータが有効であった場合にのみ、cleaned_dataに追加されます。つまり、クリーンの早い段階でエラーがあるかどうかを使用self.cleaned_data.getまたは確認self.errorsし、個々のフィールドが有効でない場合は必要ない可能性のある追加の検証をそのまま行う必要があります。

于 2012-05-31T22:28:06.643 に答える