Django中使用getlist获取多值失败:返回空列表[]
解决Django无法获取Ajax传递的多选值问题
核心问题及修正步骤:
键名不匹配
Ajax中传递的参数名是listitems,但你在views里用了listitems[]来获取,这是错误的。直接使用request.POST.getlist('listitems')即可拿到数组值:item_list = request.POST.getlist('listitems') print(item_list) # 现在能正确输出数组内容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对象数组的特殊处理(如果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()
- Ajax代码修改:
额外错误点修正:
- 你代码中
addsales.save()是未定义的变量,应该改为additems.save()。
内容的提问来源于stack exchange,提问作者MackyRV
相关产品推荐
相关产品推荐

