在Django中我已经定义了一些问题,我想给用户一个表单以创建自己的选择。我在HTML中获得的输出是下拉框,但我希望以“单选按钮”格式显示它。
HTML:
<form action="" method="post" autocomplete="off">
{% csrf_token %}
{% for question in context %}
<input type="radio" name="{{ question.questionText }}" value="">
{{ question }}
<label for=""></label>
{% endfor %}
<input type="submit" value="Submit">
Models.py:
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choiceText = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choiceText
Views.py:
def addchoice(request):
form_class = AddChoiceForm
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
context = form.save()
else:
context = form_class()
return render(request, 'polls/add_a_choice.html', {'context': context})
我附加的输出被添加为图像。 Screenshot is here
答案 0 :(得分:1)
您没有粘贴AddChoiceForm
代码,但我可以想象它的样子。
问题是你正在遍历表单(它的表单字段)并自己生成radio
输入,并在下一行中呈现question
表单字段的默认html在这种情况下是select
。
你可以从这里做两件事:
删除{{ question }}
并完全由您自己渲染字段 - 您可以访问模板中的字段属性(如选项)。
更改表单类中的表单窗口小部件。这里有更多信息:https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/然后放弃自己渲染radio
的想法。
如果可以的话 - 我建议你遵循一个风格指南 - 我看到你混合了一点,你可以在一段时间内发现你的代码混乱。例如,questionText
应为question_text
。当你render
传递的整个字典是context
时,context
命名表格不是一个好主意(例如我花了一些时间来破译你在那里做的事情) )。