2012年4月3日火曜日

DjangoのQueryDict instance is immutableエラー

Djangoでは端末からGET/POSTされた値が
requestオブジェクトに格納されます。

参照するにはこんな感じ。
print request.POST['text']

でも、POSTされた値を編集したい事もあります。

if request.method == 'POST':
str = request.POST['text']
#strの値を書き換える処理
request.POST['text'] = str

ここで値を上書きしようとすると例外が発生します。

AttributeError at /add

This QueryDict instance is immutable
Request Method: POST

こんな感じ。

request.POSTはQueryDictというオブジェクトで、書き換え不可になっている為このエラーがでます。

いかにもPythonらしい躾けのエラーですね(笑)

というわけで、書き換えたい場合はQueryDictオブジェクトが持つcopyメソッドを使用してコピーを作ります。

if request.method == 'POST':
cp = request.POST.copy()
str = cp['text']
#strの値を書き換える処理
cp['text'] = str

これならエラーになりません。

また一つ勉強になりました。

0 件のコメント:

コメントを投稿