Class based View
で post
送信された値を受け取り、
Form
を生成しようとしたところ、エラーが発生したので、
対処方法を記録します。
参考サイト
エラーと修正内容
- ダメな記述抜粋
# Form を再生成する
form = SelectViewForm(request['tool_choice'])
request
に詰まった値を取得しようとして書いたつもりですが、
下記のエラーが発生しました。
- エラー内容
'WSGIRequest' object is not subscriptable
- 修正内容
request['tool_choice']
ではなく、
request.POST['tool_choice']
と記載しないといけないだけだったので、
以下のように記載して、正常に動作しました。
form = SelectViewForm(request.POST['tool_choice'])
体系的な学習もせず、いきあたりばったりで実装していくと、
思わぬどうしようもないところで、
エラーになりますね。。
補足 追記(2017/07/17)
そもそも WSGIRequest について
そもそも、WSGIRequest がなんなのかよくわかってなかったですが、
django/wsgi.py at master · django/django
にクラスは定義されています。
リクエストとレスポンスのオブジェクト | Django documentation | Django
あたりにも、一文字も登場しないのですが、wsgi.py を使う限りは基本的に、HTTPRequest の実体はWSGIRequest になるのかと思われます。
wsgi については、以下の記事がわかりやすかったです。
WSGIからDjangoの流れを理解する - Make組ブログ(移行して http://blog.hirokiky.org/ にあるよ)
object is not subscriptable について
エラーメッセージ中の、subscriptable
についてですが、
以下、記事を見る限り、Taple とか、List オブジェクトではないので、添字アクセスはできない場合発生するエラーのようです。
【Python】式(1,2)は丸括弧がタプルを作っているわけではない - Qiita
__getitem__
が実装されてないから、このエラーになると理解しました。
Wicket
もそうですが、というか言語問わずで、
Web
アプリケーションでForm
を使うとなった時点で考慮事項一気に増えるなと、
久しぶりに書いて思いました。
以上です。
コメント