首页 文章

django:如果未设置choicefield值,则request.POST键为空

提问于
浏览
0

我目前正在使用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是一个字典,所以即使它的值为空,它也应该返回所有键 .

任何人都可以帮助我解决我的代码或错过的任何问题吗?谢谢!

1 回答

  • 1

    您也应该在POST上使用该表单,然后调用 is_valid() 并访问表单的 cleaned_data dict .

相关问题