Django集成Select2多选框提交仅获取单个值的异常问题
修复方案
你遇到的多选值仅提交单个的问题属于前端传值异常,和后端getlist方法无关,按以下步骤逐一排查修复即可:
- 修正select标签的name属性
Django等后端框架识别同名字段多值时,要求多选字段的name携带数组标识,将原有name="resources"修改为name="resources[]",修正后的表单代码如下:
<div class="form-group"> <label>Multiple select using select 2</label> <select class="js-example-basic-multiple w-100" id='mls' name="resources[]" multiple="multiple"> <option value="AL">Alabama</option> <option value="WY">Wyoming</option> <option value="AM">America</option> <option value="CA">Canada</option> <option value="RU">Russia</option> </select> </div>
- 检查Select2初始化配置
确认Select2初始化时没有配置maximumSelectionLength: 1这类限制选中数量的参数,也没有绑定change事件手动清空、覆写选中值,标准初始化参考:
$('.js-example-basic-multiple').select2({ width: '100%' // 不要添加限制选中数量、覆写选中值的逻辑 });
- 排查自定义提交逻辑的取值问题
如果你是通过AJAX手动拼接参数提交,不要用只取单个选中值的写法,要直接获取Select2返回的全量选中值数组:- 错误写法(仅取第一个选中值):
resources: $('#mls option:selected').val() - 正确写法(获取全量选中值):
resources: $('#mls').val()
- 错误写法(仅取第一个选中值):
- 排查表单内同名字段冲突
检查整个表单域,确认不存在其他name="resources"或name="resources[]"的隐藏输入项、单选框,这类同名字段会在提交时覆盖多选框的传值。
验证方法:修改后打开浏览器开发者工具的「网络」面板,重新提交表单查看请求载荷,正常情况下能看到多条resources相关的参数,此时后端调用
request.POST.getlist('resources[]')即可获取所有选中的选项值。
内容的提问来源于stack exchange,提问作者burning
相关产品推荐
相关产品推荐

