【问题标题】:Convert QueryDict in Django to an array of object将 Django 中的 QueryDict 转换为对象数组
【发布时间】:2020-08-11 20:04:16
【问题描述】:

我在 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)

【问题讨论】:

    标签: javascript python django ajax


    【解决方案1】:

    试试这个:

    results = request.GET['results']
    
    for i in results:
        #make something
    

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

    results = request.GET.get('results')
    
    for i in results:
        #make something
    

    好的,那么,看看你在请求中收到了什么。GET:

    {'type': ['results'], 'results[0][word]': ['hello'], 'results[0][qType]': ['意义'], 'results[0 ][result]': ['true'], 'results[1][word]': ['okay'], 'results[1][qType]': ['意义'], 'results[1][结果]':['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 中传递它的方式。

    【讨论】:

    • 不!第一个返回错误,第二个用 none 填充结果。
    【解决方案2】:

    通过JSON.stringify();函数改变json格式的ajax内传递数据的方式:

    allResults.push(JSON.stringify(Obj))
    

    它会像这样显示:

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

    然后,通过json.loads() 函数进行转换,就可以像 Python 字典一样访问它们:

    import json
    results = request.GET.getlist('results[]')
    for res in results:
        print(json.loads(res)['word'])
    

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 2022-01-14
      • 2021-05-03
      • 2018-12-04
      • 2021-06-16
      • 1970-01-01
      相关资源
      最近更新 更多