Formクラス中の clean_<fieldname>中でユーザーのパスワードを確認する

7 views
Skip to first unread message

kame

unread,
Jun 5, 2009, 2:11:09 PM6/5/09
to django-ja
お世話になっております、kameと申します。Djangoに2ヶ月くらい没頭しているのですが、
自分で作成したFormクラス中(Forms.formの子クラス)の、 clean_<fieldname> 中のバリデーションで少々はまっており
ます。

現在、私がDjangoで作成しているアプリケーションにログイン後、セキュリティのために、ユーザーが自分でパスワードを
変更出来るためのMVTを実装しようとしているのですが、どうしてもFormクラスのclean_<fieldname>メソッド(例: def
clean_NewPassword(self): )
中でユーザーの情報、すなわち"django.contrib.auth.models.User" (以下models.User)の情報を取得する
ことが出来なくて困っております。
この問題により、models.Userのcheck_passwordをclean_<fieldname>中で利用することが出来ないため、現在の
パスワードが正しいかを
判定することができなくて困っております。

唯一の引数であるselfをprint dirしてみたのですが、User関連の情報は納められておりませんでした。

色々考えて、View中でこのFormクラスを束縛で作る際に、

---------------------------------
if request.method == 'POST':
query_dict = request.POST.copy()
query_dict.__setitem__('user_obj', request.user)
form = password_change(query_dict)
---------------------------------
などとあがいてみた物の、うまくいきませんでした。

皆様は、フォームクラスのclean_<fieldname>中で、ファイルやデータベースに収まっている情報などと、照合を
行いたい場合、どのように対処されておりますでしょうか。

もし、おわかりになる方がいらっしゃいましたらご教授ください。

では!

kame

unread,
Jun 6, 2009, 5:22:01 AM6/6/09
to django-ja
自己レスです。上の問題ですが、解決することができました。
formクラスのinitをオーバーライドし、

#(forms.py)
class TestForm(forms.form):
def __init__(self, user, *args, **kwargs):
self.user = user
super(password_change, self).__init__(*args, **kwargs)
.
.
-------------------------------
#(view.py)
.
.
form = password_change(request.user)
if request.method == 'POST':
form = password_change(request.user, request.POST)
.
.
とすることで、request.userの情報をformsクラス中に持たすことができました。
実は、一番はじめにこの方法にトライしていたのですが、うまくいきませんでした。
その理由は、formのインスタンスを作成する際、以下のように、引数を渡していたためでした。

form = password_change(request.POST, request.user) #引数の渡し方が逆

それに気づかず、1日を費やしてしまいました・・・
何はともあれ解決することができました。

では

Reply all
Reply to author
Forward
0 new messages