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

时间:2016-09-19 03:42:38

标签: 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;
}

以下是views.py

中显示的参数
print request.POST
<QueryDict: {u'form_4606-name': [u''], u'form_4606-parents': [u'4603', u'2231', u'2234']}>

但我无法提取父母:

print request.POST['form_4606-parents']
2234

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

3 个答案:

答案 0 :(得分:21)

来自here

  

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

values = request.POST.getlist('key')

这应该有助于retrieving list items from request.POST in django/python

答案 1 :(得分:1)

您可以使用getlist方法

data = request.POST.getlist('form_4606-parentspass_id','')

答案 2 :(得分:0)

def QueryDict_to_dict(query_dict):
    """
    Return a QueryDict object as a dict.
    Unlike Django QueryDict.dict() function, this keeps lists that 
    have two or more items as lists.
    """
    data = {}
    for key in query_dict.keys():
        v = query_dict.getlist(key)
        if len(v) == 1:
            v = v[0]
        data[key] = v
    return data