request.GETやrequest.POSTはQueryDictです

はまりそうなのでメモ。
request.POSTなどの辞書にパラメータを追加して使いまわす場合(フォームとか
最初にdictを作って、updateメソッドでrequest.POSTなどを引数に渡すとよろしくない。

def hoge_view(request):
    d = {'bar': 'hoge'}
    d.update(request.POST)
    form = HogeForm(d)
    # 以下略

このコードは動く。しかし、dはdictだけども、request.POSTはQueryDict。QueryDictはvalueをリストで持ってるので、フォームの値がおかしくなる。

じゃあどう書くか。以下に例。

def hoge_view(request):
    d = request.POST.copy()
    d.update({'bar': 'hoge'})
    form = HogeForm(d)
    # 以下略

追記

Ianに突っ込まれたので経緯などを少し追記した。