Невозможно отправить несколько значений select в представление django

У меня есть select и у него несколько значений, но в backend

список knowledge_keywords пуст

knowledge_keywords = request.POST.getlist('knowledge_keywords')
<div class="container">
    <div class="input-group"> <span class="input-group-addon">
        <input type="checkbox" class="form-check-input" name="key_words_check_box" value="1">
        </span>
        <select class="hidden" id="keywords" name="knowledge_keywords" multiple="multiple" data-role="tagsinput">
        </select>


    </div>
</div>

enter image description here

Views.py

keywords = request.POST.getlist('keywords')

в шаблоне

<select name="keywords" multiple="true">
    <option value="1">Keyword 1</option>
    <option value="2">Keyword 2</option>
    <option value="3">Keyword 3</option>
    <option value="4">Keyword 4</option>
    <option value="5">Keyword 5</option>
</select>
  • попробуйте это и выведите ключевые слова переменной, если это все еще дает ошибку, тогда прокомментируйте еще раз и укажите, какая ошибка выдается, я пробовал это, это работает.

Не пишите форму в html, используйте повторно Django логику.

Вы можете создать класс Form:

Forms.py

from django import forms

class MyForm(forms.Form):
    CHOICES = (
        ("option1", "option1"),
        ("option2", "option2"),
    )

    knowledge_keywords = forms.MultipleChoiceField(
        widget=forms.CheckboxSelectMultiple, choices=CHOICES
    )

template.html

<form method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value='submit'>
</form>

используйте FormView, предоставляемый Django, который поможет вам управлять формой в представлении, например:

Views.py

from django.views.generic import FormView
from forms import MyForm

class MyView(FormView):
    form_class = MyForm
    template_name = 'template.html'

    def form_valid(self, form):
        # can you access to cleaned value in the form inside
        # form.cleaned_data['knowledge_keywords']
        # and you can execute query or something else
        
        return super().form_valid(form)

Вместо этого вы можете взять все опции с помощью jquery и поместить их в скрытый вход, а затем отправить их в бэкенд


var SelectOptions = ''
// event listener when user submits the button
$("#buttonsubmit").click(function(){
    $("#keywords option").each(function(){
        SelectOptions  = SelectOptions + $(this).val().trim() + ' '
    });

    // put the values in  SearchKeyword input
    $("#SearchKeyword").val(SelectOptions)

}); 

Вернуться на верх