Django poll - переход от только одного выбранного варианта (радио) к множественному выбору (чекбокс) и регистрация всех вместе
Я сделал приложение для опроса на django. Оно работает нормально, но я хочу изменить выбор и регистрацию опции голосования. Сейчас я могу выбрать и зарегистрировать один вариант ('participanti') (radio btn select), но я хочу иметь возможность позволить пользователю выбрать более одного варианта ('participanti') (1 или от 1 до максимум 3) в одном экземпляре и после отправки зарегистрировать все выбранные варианты/участники (1 или 2 или все максимум 3, которые выбрал пользователь). Я не знаю, как подступиться к такому механизму. Пожалуйста, помогите мне с решением. Большое спасибо. Ниже приведены настройки май
модели
class Campanie(models.Model):
.....
class Participanti(models.Model):
campanievot = models.ForeignKey(Campanie, on_delete=models.CASCADE)
nume_participant = models.CharField(max_length=200, verbose_name='nume')
dep_participant = models.CharField(max_length=200, verbose_name='departament')
votes = models.IntegerField(default=0)
def __str__(self):
return self.nume_participant
class Meta:
verbose_name = 'Participanti'
verbose_name_plural = 'Participanti'
views.py
def votare_campanie(request):
campanie = get_object_or_404(Campanie)
try:
participant_votat = campanie.participanti_set.get(pk=request.POST['participanti'])
except (KeyError, Participanti.DoesNotExist):
return render(request, 'campanievot/campanie.html', {
'campanie' : campanie,
'error_message' : "Trebuie sa votezi cel putin un coleg",
})
else:
participant_votat.votes += 1
participant_votat.save()
messages.success(request, "Multumim pentru feedback!")
return redirect('campanievot:index')
template.html
<form action=" {% url 'campanievot:votare_campanie'%} " method="post" >
{% csrf_token %}
{% for p in campanie.participanti_set.all %}
{% if p.dep_participant == request.user.departament %}
{% else %}
<label for="p{{ forloop.counter }}" class="form-check custom-icon mt-2 mb-4" role="button">
<input type="radio" name="participanti" class="form-check-input" id="p{{ forloop.counter }}"
value="{{ p.id }}">
<span class="form-check-label">
<span class="content">
<span for="p{{ forloop.counter }}" class="heading mb-1 d-block lh-1-25">{{p.nume_participant }} {{ p.dep_participant }}</span>
<!-- <span class="d-block text-small text-muted">04.05.2021 - 12:00 </span> -->
</span>
</span>
</label>
{% endif %}
{% endfor %}
{{form.media}}
<button class="m-auto btn btn-icon btn-icon-start btn-primary mb-1" type="submit">
<i data-acorn-icon="send"></i>
<span>Trimite</span>
</button>
</form>
Спасибо!