Django:传递AJAX POST数据时即使键存在也出现MultiValueDictKeyError

5 投票
1 回答
4689 浏览
提问于 2025-04-18 06:12

我的Ajax请求里有一些数据:

data: { hint: {'asdf':4} },

我觉得我应该可以用这个来访问这个对象:

request.POST['hint'] # and possibly request.POST['hint']['asdf'] to get 4

但是我遇到了这个错误。然后我查看了:

MultiValueDictKeyError at /post_url/
"'hint'"

当我打印出这些数据时,得到的字典格式很奇怪:

<QueryDict: {u'hint[asdf]': [u'4']}>

我应该怎么正确地传递这些数据,这样我在Python中也能保持和在JavaScript中一样的结构,照样使用呢?

1 个回答

11

首先,在你的 $.ajax 调用中,不要直接把所有的 POST 数据放进 data 属性里,而是把它放进一个叫 json_data 的新属性里。比如:

data: { hint: {'asdf':4} },

应该改成:

data: { json_data: { hint: {'asdf':4} } },

现在,json_data 需要用 JSON.stringify 转换成一个普通的字符串:

data: { json_data: JSON.stringify({ hint: {'asdf':4} }) },

这样就可以把数据作为字符串传给 Django,Django 可以通过以下方式获取这些数据:

data_string = request.POST.get('json_data')

然后可以把它转换成类似字典的对象(假设在代码开头用 import json 导入了 json):

data_dict = json.loads(data_string)

或者,也可以不使用中间的 data_string

data_dict = json.loads(request.POST.get('json_data'))
print data_dict['hint']['asdf'] # Should print 4

撰写回答