如何在 Django 上将 True 设置为 BooleField 的默认值?

我在 Django 中使用 BooleanField

默认情况下,它生成的复选框是未选中状态。我希望默认情况下检查该状态。我该怎么做?

195128 次浏览

如果只是使用普通表单(而不是 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,则可以在 model 字段(https://docs.djangoproject.com/en/2.2/ref/models/fields/#default)上设置默认值,该值将应用于生成的 ModelForm,如

class MyModel(models.Model):
my_field = models.BooleanField(default=True)

最后,如果希望在运行时动态选择默认情况下是否选择字段,可以在 初始化它时使用表单的初始参数:

form = MyForm(initial={'my_field':True})
from django.db import models


class Foo(models.Model):
any_field = models.BooleanField(default=True)

我使用的是 django = = 1.11。得票最多的答案实际上是错误的。检查 django 的文档时,它显示:

在此字段的初始显示中使用的值 如果没有给出数据,则使用 没有作为备用。

如果你深入挖掘表单验证过程的代码,你会发现,对于每个字段,表单都会调用它的 Widget 的 value_from_datadict来获得实际值,所以这是我们可以注入默认值的地方。

要为 BooleanField做到这一点,我们可以从 CheckboxInput继承,覆盖默认的 value_from_datadictinit函数。

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中,Model.py中 Boolean Field 的默认值是这样设置的:

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)

我在这里找到了答案

initialdefault的属性对我来说都不起作用,如果这是你的情况,试试这个:

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

检查 BooleanField 默认状态的另一种方法是:

   active = forms.BooleanField(
widget=forms.CheckboxInput(
attrs={
'checked': True
}
)
)