Как получить список значений всех выбранных checkbox? Python+Django
В шаблоне html имеется список из checkbox.
<form action="" method="POST">
{% csrf_token %}
<input type="hidden" name="ans" value="{{func}}">
<p>
<label>Выберите замкнутый класс:</label>
{%for el in zclass%}
<div class="form-check">
<input class="form-check-input" type="checkbox" name="class" id="flexRadioDefault1" value="{{el}}">
<label class="form-check-label" for="flexRadioDefault1">{{el}}</label>
</div>
{%endfor%}
</p>
<input class="btn btn-outline-primary" type="Submit" name="submit" value="Проверить">
</form>
Мне нужно получить список со всеми выбранными значениями.
Соответствующий фрагмент из views.py
def close_class(request):
submitbutton = request.POST.get("submit")
task = Task.objects.get(type="close_class")
func = BFrand(3)
answer = ''
zclass = ['сохраняющая 0', 'сохраняющая 1', 'самодвойственная', 'монотонная', 'линейная']
if request.method == 'POST':
clas = request.POST.get("class")
func = request.POST.get("ans")
print(clas)
func = BFrand(3)
context = {'task': task, 'submitbutton': submitbutton, 'func': func, 'zclass': zclass, 'answer': answer}
return render(request, 'main/starttask/close_class.html', context)
Я получаю значения checkbox как обычно через get, но в таком случае мне возвращается только последнее выбранное занчние в списке. Как получить список всех выбранных значений?
Ответы (1 шт):
Мое решение в похожей ситуации выглядит так: Шаблон
<span>Фильтровать по году выполнения:</span>
{% for i in year %}
<input type="checkbox" name="year_{{ i }}" value={{ i }} checked>{{ i }}
{% endfor %}
view
Формируем перечень доступных годов у объектов целевой модели (для передачи в шаблон):
for i in objectslist:
try:
year = i.zakrytie_date.year
if str(year) in year_list:
pass
else:
year_list.append(str(i.zakrytie_date.year))
except AttributeError:
pass
Получаем данные get запросом:
# получение списка выбранных годов----------------------------------------
for i in year_list:
q = ''.join(['year_', str(i)])
try:
year_filter.append(request.GET[q])
except KeyError:
pass
# -------------------------------------------------------------------------
Собственно фильтруем queryset по годам (первым условием мы проверяем что фильтрация необходима если список доступных годов не равен тому что прилетело в get):
# фильтрация по году-------------------------------------------------
if year_filter != year_list:
filtered_ozp_objects = filtered_ozp_objects.filter(zakrytie_date__year__in=year_filter)
filtered_by_year = 'По следующим годам ' + ' '.join(year_filter)
else:
filtered_by_year = ''
Здесь filtered_by_year просто сообщение о примененной фильтрации