【发布时间】:2011-07-08 14:23:24
【问题描述】:
我在 Django 中使用BooleanField。
默认情况下,它生成的复选框是未选中状态。我希望默认检查状态。我该怎么做?
【问题讨论】:
标签: python django django-models
我在 Django 中使用BooleanField。
默认情况下,它生成的复选框是未选中状态。我希望默认检查状态。我该怎么做?
【问题讨论】:
标签: python django django-models
在 BooleanField 中检查默认状态的另一种方法是:
active = forms.BooleanField(
widget=forms.CheckboxInput(
attrs={
'checked': True
}
)
)
【讨论】:
initial 和 default 属性都不适用于我,如果这是你的情况,试试这个:
class MyForm(forms.ModelForm):
validated = forms.BooleanField()
class Meta:
model = MyModel
fields = '__all__'
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['validated'].widget.attrs['checked'] = True
【讨论】:
在 Django 3.0 中,model.py 中 BooleanField 的默认值设置如下:
class model_name(models.Model):
example_name = models.BooleanField(default=False)
【讨论】:
我发现最干净的方法是这样。
在 Django 3.1.5 上测试
class MyForm(forms.Form):
my_boolean = forms.BooleanField(required=False, initial=True)
【讨论】:
如果您只是使用普通表单(不是 ModelForm),您可以设置字段初始值 (https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field.initial),例如
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
如果您使用的是 ModelForm,您可以在模型字段 (https://docs.djangoproject.com/en/2.2/ref/models/fields/#default) 上设置默认值,该值将应用于生成的 ModelForm,例如
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
最后,如果你想在运行时动态选择你的字段是否默认被选中,你可以在initialize it时使用表单的初始参数:
form = MyForm(initial={'my_field':True})
【讨论】:
form = MyForm(initial={'my_field':True}),我没有立即在文档中找到它。
我正在使用 django==1.11。得到最多票的答案实际上是错误的。检查来自 django 的文档,它说:
initial -- 在此字段的初始显示中使用的值。这个值 如果未提供数据,不用作后备。
如果你深入研究表单验证过程的代码,你会发现,对于每个字段,表单都会调用它的 widget's value_from_datadict 来获取实际值,所以这里就是我们可以注入默认值。
要为BooleanField 执行此操作,我们可以从CheckboxInput 继承,覆盖默认的value_from_datadict 和init 函数。
class CheckboxInput(forms.CheckboxInput):
def __init__(self, default=False, *args, **kwargs):
super(CheckboxInput, self).__init__(*args, **kwargs)
self.default = default
def value_from_datadict(self, data, files, name):
if name not in data:
return self.default
return super(CheckboxInput, self).value_from_datadict(data, files, name)
然后在创建BooleanField时使用这个小部件。
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
【讨论】:
Django 3.0 也有效。谢谢。
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
【讨论】:
initial(对于未绑定的形式),但没有提到default