Извлечение нескольких значений Select2 в представлениях Django для использования в серверной части

#python #django #jquery-select2

#python #django #jquery-select2

Вопрос:

У меня есть рабочий выпадающий список Select2 Multi в моем html, но как мне вернуть эти значения обратно в Django для использования в серверной части?

Например, в моем html у меня есть:

 <script>
    $(document).ready(function()
    {
        $("#ddlselect").select2({
            placeholder:'Select from List',
            closeOnSelect:false
        });

    });
</script>
 

Затем я заполняю выпадающий список следующим кодом:

         <select id="ddlselect" multiple="multiple" style="width: 250px;">
            {% for item in mylist %}
                <option> {{ item }} </option>
            {% endfor %}
        </select>
 

Это работает, и я могу выбирать из выпадающего списка.

Я могу получить значения, используя следующее в html:

 <script>
function myFunction() {
  alert("Selected value is: " $("#ddlselect").select2("val"));
}
</script>
 

Теперь, как мне вернуть эти значения в мои представления Django?

Я попробовал следующее —

 class newoption(TemplateView):

   template_name = 'home/page.html'
   
   def get(self, request):

      return render(request, self.template_name, dict)

   def post(self, response):
        a = response.POST['ddlselect']
 

Я получаю сообщение об ошибке при попытке вернуть a для использования в серверной части. Как мне извлечь выбранные значения из select2MultiSelect?

Ответ №1:

Вы можете использовать метод getlist():

Возвращает список данных с запрошенным ключом. Возвращает пустой список, если ключ не существует, а значение по умолчанию равно None. Гарантируется возврат списка, если указанное значение по умолчанию не является списком.

 self.request.POST.getlist('ddlselect')
 

Что-то вроде этого:

 from django.http import HttpResponse

class NewOption(TemplateView):
    
    ...

    def post(self, request, *args, **kwargs):
        ddl = request.POST.getlist('ddlselect')
        ... Some code here ...
        return HttpResponse("Submitted!")
 

Также добавьте name атрибут в свой html select:

 <select name="ddlselect" id="ddlselect" multiple="multiple" style="width: 250px;">
...
</select>
 

Комментарии:

1. Спасибо за ответ. Я возвращаю пустой список в своем коде. Есть ли что-нибудь еще, что мне нужно добавить / рассмотреть?

2. Что вы имели в виду — «Я возвращаю пустой список в свой код»?

3. Переменная ddl возвращает пустой список вместо выбранных значений из multiselect.

4. @MC2020, распечатай свой request.POST . Вы что-нибудь видите?

5. @MC2020, добавьте name="ddlselect" в свой выбор