使用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
相关产品推荐
相关产品推荐

