【问题标题】:Django Forms BooleanField on submit returns 'on'Django Forms BooleanField on submit 返回“on”
【发布时间】:2013-10-25 17:52:54
【问题描述】:

您好,我是 Django 表单的新手。我正在尝试在我的表单中添加一个复选框。当我提交表单时,我期望复选框字段应返回 True 或 False,(取决于复选框是否被选中)。

但如果该字段被选中,它会发布“on”,如果该字段未被选中,则不会发布任何内容。 以下是我表单中的代码 sn-p:

from django import forms
class MyForm(forms.Form):
    def __init__(self):
        self.fields['has_code']= forms.CharField(widget= forms.CheckboxInput())

我想要的是当我发布表单时,我应该将发布数据作为 {'has_code': True}

【问题讨论】:

    标签: django forms http-post


    【解决方案1】:

    那是你的浏览器,不是 Django。但是(尽管您没有显示您的视图,这会有所帮助)您正在查看 request.POST。不要那样做。使用 Django 表单的全部意义在于它将这样的内容标准化,因此您应该查看表单的 cleaned_data dict。

    def my_form_view(request):
        if request.method == 'POST':
            my_form = MyForm(request.POST)
            if my_form.is_valid():
                # my_form.cleaned_data['has_code'] is now a bool
    

    您还应该在表单中使用BooleanField。另外,你不应该覆盖__init__,除非你正在做一些动态的事情。您的表单应该是:

    class MyForm(forms.Form):
        has_code = forms.BooleanField(widget= forms.CheckboxInput())
    

    【讨论】:

    • 这有帮助。是的,我正在调查 request.POST Thanx。
    • CheckboxInputBooleanField 的默认选择。您的代码可能只是 has_code = forms.BooleanField()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2017-01-27
    相关资源
    最近更新 更多