一尘不染

Django:即使键存在,将AJAX POST数据传递给Django也会产生MultiValueDictKeyError

ajax

我的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中保留相同的结构并以与JS中相同的方式使用它?


阅读 264

收藏
2020-07-26

共1个答案

一尘不染

首先,在$.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,可以通过以下方式检索:

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

可以将其转换为类似dict的对象(假设顶部json导入import 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
2020-07-26