select2多选框仅将最后选择的值放入数组

我最近尝试在select2应用中使用django多选框,select2框显示正确,可以选择多个选项,但有一个问题当选定的值放入数组时,

这是我的代码:

html页面:

<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/css/select2.min.css" rel="stylesheet" />
<script src="{% static 'js/vendor/jquery-3.4.1.min.js' %}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.10/js/select2.min.js"></script>
    <script>
        $(document).ready(function() {
            $('.recipientMultiSelect').select2({
                placeholder: "Choose Recipient Numbers / Groups",tags: true
            });
        });
    </script>
</head>

<body>
        <form action="{% url 'broadcast_single' %}" method="POST">
            {% csrf_token %}
            <div class="col-md-4">    
                <div class="form-group">
                    <label for="broadcast_name" class="col-form-label"> Broadcast Name: </label>
                    <input type="text" name="broadcast_name" class="form-control" required>
                </div>
            </div>
            <div class="col-md-4">    
                <div class="form-group">
                    <label for="recipients[]" class="col-form-label"> Recipient List: </label>
                    <select class="recipientMultiSelect form-control" name="recipients[]" multiple="multiple" required>
                        <option value="aaaaaa">aaaaaa</option>
                        <option value="bbbbbb">bbbbbb</option>
                        <option value="cccccc">cccccc</option>
                    </select>
                </div>
            </div>
            </br>
            </br>
            </br>
            </br>
            <div class="col-xs-8 col-md-8">    
                <div class="form-group">
                    <label for="broadcast-content" class="col-form-label"> SMS Content: </label>
                    <textarea name="broadcast_content" rows="15" cols="85" maxlength="160" class="form-control"> </textarea>
                </div>
            </div>
            <div class="col-xs-8 col-md-8">    
                <div class="form-group">
                    <button class="btn btn-primary btn-block mt-4" type="submit">Send Broadcast</button>    
                </div>
            </div>
        </form>
</body>

让我们假设所有3个选项均已选中并传递到数组recipients[]

views.py:

def broadcastSingle(request):
    if request.method == 'POST':
        bcName = request.POST['broadcast_name']
        bcRecArray = request.POST['recipients[]']
        bcContent = request.POST['broadcast_content']


        print('PRINT : ',len(bcRecArray))
        print(','.join(bcRecArray))

bcRecArray应包含['aaaaaa','bbbbbb','cccccc'],长度应为3

但是,bcRecArray具有['c','c','c','c','c','c']和长度为6

我认为,select2多选框仅采用了最后一个选定的值,并将其转换为选定值中的字母数组。

lienzhangyubo 回答:select2多选框仅将最后选择的值放入数组

使用bootstrapDualListbox时,我遇到了同样的问题。我想出的解决方案是使用一个隐藏的文本字段,然后在提交时,将多选中的值复制到隐藏的文本字段中:

        // "employees" is a jQuery handle to the multi-select.
        let data = employees.val();
        if (data.length === 0) {
            submitError('<p>{{ _('No employees selected') }}</p>',event);
        } else {
            //
            // We want ints,not strings.
            //
            data = data.map(x => parseInt(x));
            snapshot.val(JSON.stringify({"employees": data}));
        }

回到服务器上,当然必须根据需要从隐藏的文本字段中解压缩JSON。

,

我从这个线程中找到了答案: Django: using <select multiple> and POST

我应该改用request.POST.getlist('recipients'), 因为[]在django中不起作用,因为它仅限于PHP。

谢谢,我将关闭此线程。

本文链接:https://www.f2er.com/3157884.html

大家都在问