1

我在标准 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 参数,也会发生同样的事情。

4

2 回答 2

3

首先,您不能使用required=Falsea 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>

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

<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"})
于 2012-09-11T13:26:23.647 回答
0

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

我最终发现解决方案是重新运行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 字段类型,请尝试重新生成数据库。

于 2014-02-27T19:51:14.133 回答