request.POST
とかで使われているやつです。 dict
との挙動の違いを確認する必要があったのでメモ。
特長は、
- クエリストリングを渡してインスタンスを作る
- Immutable (でも mutable=True を渡せる)
- 値をリストで保持している (MultiValueDict を継承している)
>>> from django.http import QueryDict
>>> qd = QueryDict('spam=1&egg=2')
# get で取得すると文字列が返る
>>> qd.get('spam')
u'1'
# getlist で取得するとリストが返る
>>> qd.getlist('spam')
[u'1']
# クエリストリングに戻す
>>> qd.urlencode()
u'egg=2&spam=1'
# 値をセットしてみる
>>> qd['spam'] = 100
AttributeError: This QueryDict instance is immutable
# mutable=True で QueryDict を作る
>>> qd2 = QueryDict('spam=1&egg=2', mutable=True)
>>> qd2.get('spam')
u'1'
>>> qd2['spam'] = 100
>>> qd2.get('spam')
100
# dict に変換してみる
>>> d = dict(qd)
>>> d.get('spam')
[u'1']