Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django:如果未设置choicefield值,则request.POST键为空_Python_Django_Web Applications - Fatal编程技术网

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

Python django:如果未设置choicefield值,则request.POST键为空,python,django,web-applications,Python,Django,Web Applications,我目前正在开始使用django进行web开发。在我的申请中,我想要一个表格,上面有各种各样的问题和他们的选择 在models.py中,创建一个表来存储问题 class QuizItems(models.Model): question = models.CharField(max_length=255) choices = SeparatedValuesField(token="$") answer = models.IntegerField() 在form.py中,我

我目前正在开始使用django进行web开发。在我的申请中,我想要一个表格,上面有各种各样的问题和他们的选择

在models.py中,创建一个表来存储问题

class QuizItems(models.Model):
    question = models.CharField(max_length=255)
    choices = SeparatedValuesField(token="$")
    answer = models.IntegerField()
在form.py中,我在form类中重载了_init__uu方法,以便传递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中

在quick.html中

{%用于表单%]中的字段
  • {{field.label}}
    • {{field}
    {%endfor%}
    我想得到idlst,问题id的列表,我可以从中得到正确的答案。当所有的选择字段都被填满时,它工作得很好。问题是如果有任何choicefield值为空,我将无法获取其密钥。我认为,由于request.POST是一个字典,它应该返回所有键,即使其值为空。


    谁能帮我一下我的代码出了什么问题或者有什么遗漏?谢谢大家!

    您也应该在POST上使用表单,然后调用
    is\u valid()
    并访问表单的
    已清理数据
    目录。

    起初,我不确定您是否正在检查请求的值。POST QueryDict django正在返回给您。您没有向我们显示发生实际错误的代码行。我使用
    form=QuizForm(qchoose,request.POST)
    获取表单,但是
    form.is\u valid()
    无法正常工作,因为当有空值时它仍然返回True。我认为这是因为request.POST中并没有键和空值关联,所以并没有出现错误。我不知道为什么钥匙没有归还。
    if request.method == 'POST':
        idlst = request.POST.keys()
    else:
        # qchoose is a list of quizitems
        form = QuizForm(qchoose)
    
    {% for field in form %}
    <li><b> {{ field.label }} </b></li>                                                                                                                      
    <ul> {{ field }} </ul>
    {% endfor %}