3

すべてのフォームを定義するファイル forms.py があります。フォーム フィールドの 1 つでパスワードの検証を行う必要があります。

私のforms.pyで

class ChangePasswordForm(forms.Form):
    old_password = forms.CharField(widget=forms.PasswordInput)
    new_password= forms.CharField(widget=forms.PasswordInput)
    new_password_again= forms.CharField(widget=forms.PasswordInput)

    def clean_old_password(self):
        data = self.cleaned_data['old_password']
        if data != currently_logged_in_user.password:
            raise forms.ValidationError("Password Incorrect")

        return data

currently_logged_in_user.password検証に使用できるように、現在ログインしているユーザーにアクセスする必要がありますが、現在はそうではforms.pyないviews.pyため、その方法がわかりませんか? 助けてください

4

1 に答える 1

2

ビューからフォームにユーザーを渡す必要があります。次の方法で実行できます。

ビュー.py

my_form = ChangePasswordForm(user=request.user, data=request.POST)
...

フォーム.py

class ChangePasswordForm(forms.Form):
    ...

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(ChangePasswordForm, self).__init__(*args, **kwargs)

    def clean_old_password(self):
        old_password = self.cleaned_data['old_password']
        if not self.user.check_password(old_password)
            raise forms.ValidationError("Password Incorrect")
        return old_password
于 2012-08-23T14:08:34.010 に答える