【问题标题】:Django BooleanField always checked even when value is false即使值为 false,Django BooleanField 也总是检查
【发布时间】:2012-09-04 10:26:16
【问题描述】:

我在标准 Django 表单中有一个 BooleanField,定义为:

my_boolean_field = BooleanField(initial=True)

当我使用初始数据呈现我的表单,并且 my_boolean_field 设置为 False 的初始值时,当表单呈现时它仍然会被检查,尽管该值是假的,如 html 所示:

<p><label for="id_2">my_boolean_field</label>: 
    <input checked="checked" 
           type="checkbox" 
           name="2" 
           value="False" 
           id="id_2" /> 
</p>

有没有其他人遇到过这种情况,或者知道如何解决它,以便当初始数据/输入值为 false 时,复选框不会被选中?

更新:即使我从 BooleanField 中删除了 initial=True 参数,也会发生同样的事情。

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    首先,您不能在BooleanField 上使用required=False,而是使用NullBooleanField

    完成此操作后,让我知道新小部件的 HTML 输出是什么?

    编辑

    我假设这是一个 ModelForm。这是一个普通的 django.forms.Form 吗?

    编辑 2

    我的测试表格:

    from django import forms
    
    class MyForm(forms.Form) :
        """The test form"""
        my_boolean_field = forms.BooleanField(initial=True)
    

    我的模板:

    <div>
    {{ form.my_boolean_field.label_tag }}
    {{ form.my_boolean_field }}
    {{ form.my_boolean_field.errors }}
    </div>
    

    这是我在查看页面源代码时得到的输出。 已编辑

    <div>
    <label for="id_my_boolean_field">My boolean field</label>
    <input type="checkbox" name="my_boolean_field" id="id_my_boolean_field" />
    </div>
    

    我的观点

    form = MyForm(initial={'my_boolean_field':False})
    

    你展示的和我看到的不匹配。请粘贴您的完整表单、视图和模板?

    编辑 3

    我只看到这样的输出:

    <div>
    <label for="id_my_boolean_field">My boolean field</label>
    <input checked="checked" type="checkbox" name="my_boolean_field" value="False" id="id_my_boolean_field" />
    </div>
    

    当我将 False 放在引号中时:

    form = FormLogin(initial={'my_boolean_field':"False"})
    

    【讨论】:

    • 这是一个标准表格,实际上我的字段是必需的,所以我编辑了我的问题,删除了 required=False,但我仍然得到相同的行为
    • 您是否使用初始数据创建表单,例如。 form = MyForm(initial={'my_boolean_field':False})
    • AHHHHH 这就是问题所在,我实际上是在动态生成初始数据,并且布尔值被转换为字符串!非常感谢,这是一个非常好的地方!
    【解决方案2】:

    我发布此答案是因为我遇到了同样的问题,而弗朗西斯的回答对我没有帮助。

    我最终发现解决方案是重新运行manage.py syncdb。我的字段以前是 IntegerField,我已将它们转换为 BooleanField。 BooleanField 读取数据库中是否存在 value="0" 正在初始化和检查。这与您的模型所说的无关。你想看:

    <input checked="checked" id="id_cost_track_destruction" name="cost_track_destruction" type="checkbox">
    

    当你检查一个元素时。由于此错误出现在 Django 管理面板中,因此它与您的 forms.py 无关。

    这纯粹是模型和数据库问题。如果您更改了 models.py 字段类型,请尝试重新生成数据库。

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2019-11-18
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多