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

在Django 2.0中通过jQuery Dual Boxes获取POST输入遇到问题

解决Django中jQuery Dual Boxes多选数据无法通过POST获取的问题

我之前也踩过类似的坑,咱们一步步排查解决:

1. 先确认前端插件的初始化与数据同步

很多时候问题根源在于jQuery Dual Boxes没有把选中的选项同步回原始的<select>元素,导致表单提交时根本没携带选中数据。

你需要确保页面加载时正确初始化插件,比如在JS里加上这段代码:

$(document).ready(function() {
    // 定位到你的select元素并初始化双选框
    $('#demoform select[name="duallistbox_demo1[]"]').DualListbox();
});

初始化后可以打开浏览器开发者工具(Elements面板),检查原始的<select>标签是否还保留着正确的name属性,以及选中的选项是否被标记为selected——如果插件没有同步选中状态,表单自然不会提交这些值。

2. Django后端用正确的方法获取多选数据

Django处理多选表单数据时,绝对不能用request.POST.get(),这个方法只会返回单个值。你需要用getlist()方法来获取整个选项列表:

def habilitar_pdd(request):
    if request.method == 'POST':
        # 注意参数要和前端select的name完全一致,包括[]
        selected_options = request.POST.getlist('duallistbox_demo1[]')
        # 可以先打印验证数据是否拿到
        print("选中的选项:", selected_options)
        # 后续业务逻辑...
    # 其他视图代码...

3. 可选优化:简化select的name属性

其实Django原生支持多选字段,不需要在name后面加[],你可以把前端select的name改成duallistbox_demo1,这样代码更直观:

修改后的前端代码:

<form method="POST" id="demoform" action="/gestionPDD/HabilitarPDD" > 
    {% csrf_token %} 
    <select multiple="multiple" size="10" name="duallistbox_demo1" title="duallistbox_demo1"> 
        <option value="option1">Option 1</option> 
        <option value="option2">Option 2</option> 
        <option value="option3" selected="selected">Option 3</option> 
        <option value="option4">Option...</option> 
    </select> 
</form>

对应的后端代码改成:

selected_options = request.POST.getlist('duallistbox_demo1')

4. 最后验证请求数据

如果还是没拿到数据,用浏览器开发者工具的Network面板查一下POST请求的Form Data:提交表单后找到对应的请求,查看Payload里的表单数据,确认duallistbox_demo1[](或修改后的name)是否存在对应的数组值。如果这里没有,那肯定是前端插件的问题,建议检查插件版本或初始化配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:18:58