Query.ict在request.POST django中的奇怪行为

时间:2014-12-17 12:19:40

标签: python django unicode

我在Django中的request.POST中遇到QueryDict的奇怪行为。我正在发出一个ajax-post请求并尝试访问request.POST中的密钥'Highest_Qualification',如下所示

(Pdb) request.POST <QueryDict: {u'Highest_Qualification': [u'1', u'2']}> (Pdb) request.POST.get('Highest_Qualification') u'2' (Pdb) type(request.POST.get('Highest_Qualification')) <type 'unicode'>

实际上我希望type(request.POST.get('Highest_Qualification')返回<type 'list'>而不是<type 'unicode'>

但是当我这样做时

(Pdb) xx = dict(request.POST)
(Pdb) type(xx)
<type 'dict'>
(Pdb) xx['Highest_Qualification']
[u'1', u'2']
(Pdb) type(xx['Highest_Qualification'])
<type 'list'>

我获得了密钥'Highest_Qualification'的预期类型/行为。我不确定为什么会这样。任何有关为什么使dict(request.POST)有效的见解将深受赞赏。感谢

2 个答案:

答案 0 :(得分:6)

此行为旨在并记录在https://docs.djangoproject.com/en/dev/ref/request-response/#querydict-objects

替代方法.getlist(key, default)会将值作为列表返回。

答案 1 :(得分:2)

因为QueryDict不是dict。特别是,它旨在支持查询可以为同一个键具有多个值的事实,但最常见的用例是获取单个值。

如果您知道某个密钥可以有多个值,则可以使用getlist

request.POST.getlist('Highest_Qualification')

正确返回[1, 2]