【问题标题】:django QueryDict only returns the last value of a listdjango QueryDict 只返回列表的最后一个值
【发布时间】:2016-09-19 03:42:38
【问题描述】:

使用 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

为什么它只给我最后一个值? 我认为序列化有问题,但我不知道如何解决这个问题。

【问题讨论】:

  • 试试'request.POST.getlist('form_4606-parents[]')'

标签: django


【解决方案1】:

来自here

这是一项功能,而不是错误。如果您想要一个键的值列表,请使用以下内容:

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

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

【讨论】:

  • 做得很好,虽然我不知道为什么。这需要我编写一个代码,如果 key 是'parents',那么 val=request.POST.getlist(key) 否则 val=request.POST.getl(key)
  • @max (和其他) - 来自链接的票证 - “这背后的原因是 API 方法应该始终返回字符串或列表,但不能同时返回两者。Web 应用程序中的常见情况用于将表单键与单个值关联,这就是 [] 语法的作用。getlist() 适用于您打算多次为单个值使用键的情况(如您的情况)。"
【解决方案2】:

下面的函数将 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

用法:

data = querydict_to_dict(request.POST)

# Or

data = querydict_to_dict(request.GET)

【讨论】:

    【解决方案3】:

    你可以使用getlist方法

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

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2020-12-16
      • 2019-07-08
      • 1970-01-01
      • 2018-04-13
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多