我在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)有效的见解将深受赞赏。感谢
答案 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]
。