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

使用Bootstrap Selectpicker多选时Django仅获取最后一个选中值的问题

解决Django中Bootstrap Selectpicker多选仅获取最后一个值的问题

这个问题我之前也碰到过,核心原因是HTML多选控件的name属性缺少必要的后缀,导致浏览器只会把最后一个选中的值提交给后端,Django自然就只能拿到这一个值了。下面是具体的解决方法:

1. 修改HTML中的select标签

把你的<select>标签的name属性从selection改成selection[],这样浏览器会将所有选中的值以数组形式提交:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/css/bootstrap-select.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js"></script>

<select class="selectpicker" name="selection[]" multiple data-live-search="true">
  <option>Mustard</option>
  <option>Ketchup</option>
  <option>Relish</option>
</select>

2. 在Django视图中获取所有选中值

不要用request.POST['selection'],而是使用request.POST.getlist('selection[]')来获取所有选中的选项,这个方法会返回一个包含所有选中值的列表:

def your_view(request):
    if request.method == 'POST':
        # 获取所有选中的选项
        selected_items = request.POST.getlist('selection[]')
        # 后续处理逻辑,比如打印或者保存
        print(selected_items)  # 输出类似 ['Mustard', 'Ketchup']
    # 其他视图代码...

原理说明

  • 当多选控件的name不带[]时,浏览器在提交表单时,只会将最后一个选中的值绑定到该name上;
  • 加上[]后,浏览器会把所有选中的值打包成一个数组提交,Django的request.POST对象通过getlist()方法就能完整获取这个数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:52:36