Мне нужно написать простое приложение, в котором пользователь может выбрать несколько вариантов (более одного варианта). Я создаю что-то вроде этого:
models.py
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
choice_limit = models.PositiveSmallIntegerField(default=1)
add_date = models.DateTimeField('add date', auto_now_add=True)
change_date = models.DateTimeField('change date', auto_now=True)
question_enable = models.BooleanField('is published', default=False)
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return "%s %s %s" % (self.question, self.choice_text, self.votes)
views.py
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
#selected_choice = question.choice_set.get(pk=request.POST['choice'])
some_var = request.POST.getlist('choice')
selected_2 = Choice.objects.filter(question__in=some_var)
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "You didn't select a choice.",
})
else:
for x in selected_2:
x.votes += 1
x.save()
return HttpResponseRedirect("/")
шаблон
<form action="{% url 'vote' question.id %}" method="post">
{% csrf_token %}
<fieldset>
<legend>Please select one of the following</legend>
{% for choice in question.choice_set.all %}
<input type="checkbox" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
{% endfor %}
</fieldset>
<input type="submit" value="Vote">
Я не знаю, что это хороший способ Джанго? Есть ли смысл написать это приложение с ModelForm и общими взглядами? Могу ли я проверить форму по-другому? Я пытаюсь найти некоторые решения, но я только нашел:
Поле множественного выбора Django / флажок «Выбрать несколько»
встроенный выбор «один ко многим» с администратором django
но они не решают мою проблему. Я пытался создать ModelForm, но без какого-либо хорошего результата.