即使值为fals,Django BooleanField也始终选中

2024-05-19 18:41:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个标准Django格式的布尔字段,定义为:

my_boolean_field = BooleanField(initial=True)

当我使用初始数据呈现表单时,并且我的“布尔”字段设置为初始值False,当表单呈现时,尽管该值如html所示为False,但仍会选中它:

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


Tags: 数据djangoidfalsetrue表单field标准
2条回答

首先,在BooleanField上不能有required=False,请使用NullBooleanField

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

编辑

我以为这是个模型。这是普通的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"})

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

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

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

当你检查一个元素时。由于这个bug出现在Django管理面板中,所以它与forms.py无关。

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

相关问题 更多 >