首页 > 解决方案 > 将 Django 中的 QueryDict 转换为对象数组

问题描述

我在 ajax 中传递对象数组,如下所示:

function sendAjax(ajax_data) {
  return $.ajax({
    url: '/ajax/ajaxprocess/',
    data: ajax_data,
    dataType: 'json',
    success: function (data) {
      if (data.status) {
        console.log(data.msg);
      } else {
        console.log("Not success in ajax operation!")
      }
    }
  })
}

function setResult(word, qType, result) {
  resObj = {word: word, qType: qType, result: result}
  allResults.push(resObj)
}
function sendResults() {
  jsonData = sendAjax({
    'type': "results",
    'results': allResults,
  })
}

然后在后端会这样表示:

>>> print(request.GET)

<QueryDict: {'type': ['results'], 'results[0][word]': ['hello'], 'results[0][qType]': ['Meaning'], 'results[0][result]': ['true'], 'results[1][word]': ['okay'], 'results[1][qType]': ['Meaning'], 'results[1][result]': ['false'], 'results[2][word]': ['show'], 'results[2][qType]': ['Meaning'], 'results[2][result]': ['true']}>

如何更改此 QueryDict 以便我可以像对象列表一样在后端单独使用它:

for res in results:
   # do something like print(res.word)

标签: javascriptpythondjangoajax

解决方案


尝试这个:

results = request.GET['results']

for i in results:
    #make something

如果这不起作用,我很确定这个可以:

results = request.GET.get('results')

for i in results:
    #make something

好的,那么,看看你在 request.GET 中收到了什么:

{'type': ['results'], 'results[0][word]': ['hello'], 'results[0][qType]': ['意义'], 'results[0][result ]': ['true'], 'results[1][word]': ['okay'], 'results[1][qType]': ['意义'], 'results[1][result]' :['false'],'results[2][word]':['show'],'results[2][qType]':['含义'],'results[2][result]':[ '真的']}

如您所见,您可以访问类似 request.GET.get('type') 或 request.GET.get('results[0][word]') 的内容。但不是 request.GET.get('results')。只是因为你在 javascript 中传递它的方式。


推荐阅读