【问题标题】:django: request.POST key is empty if the choicefield value is not setdjango:如果未设置选择字段值,则 request.POST 键为空
【发布时间】:2012-09-01 06:40:02
【问题描述】:

我目前正在使用 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 列表,我可以从中获得正确答案。当所有选择字段都填满时,它工作正常。问题是如果有任何选择字段的值为空,我将不会得到它的键。我认为由于 request.POST 是一个字典,它应该返回所有键,即使它的值为空。

谁能帮助我的代码有什么问题或缺少什么?谢谢!

【问题讨论】:

  • 最初我不确定您是否正在检查请求的值。POST QueryDict django 正在返回给您。您没有向我们展示发生实际错误的代码行。

标签: python django web-applications


【解决方案1】:

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

【讨论】:

  • 我使用form = QuizForm(qchoose, request.POST) 来取回表单,但form.is_valid() 无法正常工作,因为当有空值时它仍然返回True。我认为这是因为 request.POST 中没有与空值关联的键,因此没有引发错误。我不知道为什么没有返回密钥。
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 2020-07-29
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
相关资源
最近更新 更多