即使值为false,Django BooleanField也会一直检查

时间:2012-09-11 13:15:12

标签: python django django-forms

我在标准的Django Form中有一个BooleanField,定义为:

my_boolean_field = BooleanField(initial=True)

当我使用初始数据渲染表单时,my_boolean_field设置为初始值False,当表单呈现时仍然会检查它,尽管值为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参数,也会发生同样的事情。

2 个答案:

答案 0 :(得分:3)

首先,您不能required=False使用BooleanField,而是使用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>

这是我查看页面源时输出的内容。的 EDITED

<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"})

答案 1 :(得分:0)

我发布这个答案是因为我有同样的问题而弗朗西斯的答案对我没有帮助。

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

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

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

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