【发布时间】:2018-05-08 05:17:09
【问题描述】:
预警:我对 Django(以及一般的 Web 开发)非常陌生。
我正在使用 Django 托管一个基于 Web 的 UI,该 UI 将从一个简短的调查中获取用户输入,通过我用 Python 开发的一些分析来提供它,然后在 UI 中呈现这些分析的可视化输出.
我的调查包含 10 个问题,询问用户他们对特定主题的同意程度。
调查用户界面示例:
对于 models.py,我有 2 个字段:问题和选择
class Question(models.Model):
question_text = models.CharField(max_length=200)
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 self.choice_text
我想让用户选择他们对所有 10 个问题的回答,然后单击提交以一次提交所有回答,但我在 Django 中如何处理这方面遇到了麻烦。
这是我正在使用的 html 表单,但是这段代码 sn-p 在每个问题之后放置一个“提交”按钮,并且一次只允许提交一个。
注意:下面的代码为每次迭代创建一个特定于问题的表单。
{% for question in latest_question_list %}
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
<div class="row">
<div class="col-topic">
<label>{{ question.question_text }}</label>
</div>
{% for choice in question.choice_set.all %}
<div class="col-select">
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
</div>
{% endfor %}
</div>
<input type="submit" value="Vote" />
</form>
{% endfor %}
我对如何在一次提交中获取多个输入(全部用于问题/选择)并将其返回给 views.py
很感兴趣编辑:添加 VIEWS.PY
目前,我的 views.py 脚本处理单个问题/选择对。一旦我弄清楚如何允许用户一次性提交所有 10 个问题/选择的表单,我将需要在 views.py 中反映这一点。这可能是问题的第 2 部分。首先,如何让用户通过一个“提交”按钮提交对所有 10 个问题的所有回复?其次,如何设置 views.py 一次接受多个值?
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'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'polls/survey.html', {
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:analysis'))
如果需要其他上下文,请告诉我。
提前致谢!
-C
【问题讨论】:
-
您能告诉我们更多关于您当前如何在您的views.py 中获取表单数据的信息吗?
-
@PiyushDas,感谢您提请注意。我已更新说明以包含此信息。
-
所以,您是说,在按下提交时,您只能得到一个问题/选择对,即使用户已经回答了每个问题。是这个问题吗?
-
我可以让用户一次提交每个问题的回答,方法是为 10 个问题中的每一个问题创建一个单独的表单,并在每个问题旁边都有一个“提交”按钮10个问题。我想要做的是允许用户选择他们所有的答案(每个问题一个),然后单击一次提交以一次性提交他们的所有 10 个答案。