組み込みDjangoフォーム(django.contrib.auth.SetPasswordForm)のクリーンメソッドをオーバーライドする際に問題があります。このフォームには、new_password1とnew_password2という2つのフィールドがあります。私forms.pyでフォームのクリーンメソッドをオーバーライドしてエラーメッセージをカスタマイズする
def reset_confirm(request, uidb64=None, token=None):
return password_reset_confirm_delegate(request,
template_name='app/reset_confirm.html',
set_password_form = MySetPasswordForm, uidb64=uidb64,
token=token, post_reset_redirect=reverse('main_page'))
:
ので、私のviews.pyに私は、カスタマイズされたフォーム(MySetPasswordForm
)を呼び出して、私は私のカスタマイズされたエラーメッセージを表示するために私自身のきれいなメソッドを定義したいです。ここで私はMySetPasswordForm
を書いた方法は次のとおりです。
from django.contrib.auth.forms import SetPasswordForm
class MySetPasswordForm(SetPasswordForm):
error_messages = { 'password_mismatch': _("Missmatch!"), }
def clean(self):
password1 = self.cleaned_data.get('new_password1', '')
password2 = self.cleaned_data.get('new_password2', '')
print password1 #prints user's entered value
print password2 #prints nothing!!
print self.data['new_password2'] #prints user's entered value
if password1 == '':
self._errors["new_password1"] = ErrorList([u"enter pass1!"])
if password2 == '':
self._errors["new_password2"] = ErrorList([u"enter pass2"])
elif password1 != password2:
raise forms.ValidationError(
self.error_messages['password_mismatch'],
code='password_mismatch',
)
return self.cleaned_data
問題は、ユーザーが代わりに"Missmatch" error
を得るための間違った繰り返しパスワードを入力したときに、それは"enter pass2"
を与えるということです!また、print password2
は、password2に入力されたユーザーの値を表示しません。
このコードで何が間違っていますか?カスタマイズされたエラーメッセージを作成する最善の方法は何ですか?
p.s.ビュー内の元のSetPasswordFormを使用するとうまく動作します。
感謝を見て、自分のフォームでclean_new_password2をオーバーライドする必要がありますどうすれば 'error_messages'ディクテーションを設定できますか? –
あなたはすでにあなたの質問に 'error_messages'を置いています。私は例を追加しました。 – Alasdair
awesome tnx。私はまだフォームを使用してnewbyだと思います:) また私のフィールドでmin-lengthバリデーションが必要です、私はerror_messagesを使ってこのバリデーションを行うことができますか(もしそうなら?)か、クリーンメソッドを使わなければなりませんか? –