select2 multi select box принимает только последнее выбранное значение в массив - PullRequest
0 голосов
/ 05 ноября 2019

Я недавно пытался использовать select2 окно множественного выбора в моем приложении django, поле select2 отображается правильно, и я могу выбрать несколько вариантов, как и должно, но есть только проблема, когда выбранные значения принимаются вмассив,

Это мой код:

html page:

<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 заняло только последнеевыбранное значение и превратить его в массив букв выбранного значения.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я нашел ответ из этой темы: Django: используяи POST

Я должен использовать вместо этого request.POST.getlist ('receients'), поскольку [] не будет работать в django, так как это всего лишь соглашение, ограниченное PHP.

Спасибо, и я закрою эту тему.

0 голосов
/ 05 ноября 2019

У меня была такая же проблема при использовании 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 необходимо распаковать из скрытого текстового поля.

...