我目前正在使用django开始Web开发。在我的申请中,我想要一个包含各种问题及其选择的表格。
在 models.py 中,创建一个表来存储问题
class QuizItems(models.Model):
question = models.CharField(max_length=255)
choices = SeparatedValuesField(token="$")
answer = models.IntegerField()
在 form.py 中,我重载了Form类中的__init__方法,以便传递qchoose,一个QuizItems实例列表来创建表单字段。
def choiceItem(question):
return [(unicode(idx), q) for idx, q in enumerate(question.choices)]
class QuizForm(forms.Form):
def __init__(self, qchoose, *args, **kwargs):
super(QuizForm, self).__init__(*args, **kwargs)
for q in qchoose:
self.fields[str(q.id)] = forms.ChoiceField(required=True,
label=q.question, widget=forms.RadioSelect(),choices=choiceItem(q))
然后在 view.py
中if request.method == 'POST':
idlst = request.POST.keys()
else:
# qchoose is a list of quizitems
form = QuizForm(qchoose)
在 quiz.html
中{% for field in form %}
<li><b> {{ field.label }} </b></li>
<ul> {{ field }} </ul>
{% endfor %}
我想得到idlst,问题ID列表,我可以从中得到正确的答案。当所有选择字段都填满时,它工作正常。问题是如果有任何choicefield值为空,我将无法得到它的密钥。我认为既然request.POST是一个字典,它应该返回所有键,即使它的值是空的。
任何人都可以帮助我解决我的代码或遗漏的任何问题吗?谢谢!
答案 0 :(得分:1)
您也应该在POST上使用该表单,然后调用is_valid()
并访问表单的cleaned_data
字典。