django QueryDict仅返回列表的最后一个值

max*_*max 14 django

使用django 1.8,我观察到一些奇怪的东西.这是我的javascript:

function form_submit(){
  var form = $('#form1_id');
  request = $.post($(this).attr('action'), form.serialize(), function(response){
     if(response.indexOf('Success') >= 0){
        alert(response);
     }
  },'text')
  .fail(function() {
    alert("Failed to save!");
  });
  return false;
}
Run Code Online (Sandbox Code Playgroud)

以下是views.py中显示的参数

print request.POST
<QueryDict: {u'form_4606-name': [u''], u'form_4606-parents': [u'4603', u'2231', u'2234']}>
Run Code Online (Sandbox Code Playgroud)

但我无法提取父母:

print request.POST['form_4606-parents']
2234
Run Code Online (Sandbox Code Playgroud)

为什么它只给我最后一个价值?我认为序列化有问题,但我无法弄清楚如何解决这个问题.

Win*_*oon 23

这里开始

这是一个功能,而不是一个bug.如果需要键的值列表,请使用以下命令:

values = request.POST.getlist('key')
Run Code Online (Sandbox Code Playgroud)

这应该有助于从django/python中的request.POST中检索列表项


maz*_*ekt 5

下面的函数将 QueryDict 对象转换为 python 字典。这是对 Django 的 QueryDict.dict() 方法的轻微修改。但与该方法不同的是,它将具有两个或多个项目的列表保留为列表。

def querydict_to_dict(query_dict):
    data = {}
    for key in query_dict.keys():
        v = query_dict.getlist(key)
        if len(v) == 1:
            v = v[0]
        data[key] = v
    return data
Run Code Online (Sandbox Code Playgroud)

用法:

data = querydict_to_dict(request.POST)

# Or

data = querydict_to_dict(request.GET)
Run Code Online (Sandbox Code Playgroud)