You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中使用getlist获取多值失败:返回空列表[]

解决Django无法获取Ajax传递的多选值问题

核心问题及修正步骤:

  1. 键名不匹配
    Ajax中传递的参数名是listitems,但你在views里用了listitems[]来获取,这是错误的。直接使用request.POST.getlist('listitems')即可拿到数组值:

    item_list = request.POST.getlist('listitems')
    print(item_list)  # 现在能正确输出数组内容
    
  2. item_size的错误处理
    request.POST.get('item_size')返回的是字符串类型,直接for i in item_size会遍历字符串的每个字符,而非数组索引。实际上你完全不需要依赖item_size,直接遍历item_list即可:

    # 废弃item_size的错误循环,改用直接遍历item_list
    for item in item_list:
        # 根据你的业务逻辑处理每个item
        additems = table1(quantity=item)  # 若item是对象,需调整为item['quantity']
        additems.save()  # 注意变量名:你之前写的addsales是未定义的,应该用additems
    
  3. 对象数组的特殊处理(如果selected_items是对象数组)
    如果selected_items是包含键值对的对象数组(比如[{quantity: 1}, {quantity:2}]),直接传递会导致jQuery序列化异常,需要先转成JSON字符串:

    • Ajax代码修改:
      $.ajax({
          type: "POST",
          url: "{% url 'sales-item' %}",
          data: {
              listitems: JSON.stringify(selected_items),
              item_size: selected_items.length
          }
      }).done(function(data){ ... })
      
    • views.py中解析JSON:
      import json
      
      item_list = json.loads(request.POST.get('listitems'))
      for item in item_list:
          additems = table1(quantity=item['quantity'])
          additems.save()
      

额外错误点修正:

  • 你代码中addsales.save()是未定义的变量,应该改为additems.save()。

内容的提问来源于stack exchange,提问作者MackyRV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:30:15