我在 Django 中使用 BooleanField。
BooleanField
默认情况下,它生成的复选框是未选中状态。我希望默认情况下检查该状态。我该怎么做?
如果只是使用普通表单(而不是 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来获得实际值,所以这是我们可以注入默认值的地方。
value_from_datadict
要为 BooleanField做到这一点,我们可以从 CheckboxInput继承,覆盖默认的 value_from_datadict和 init函数。
CheckboxInput
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中,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)
我在这里找到了答案
initial和 default的属性对我来说都不起作用,如果这是你的情况,试试这个:
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
检查 BooleanField 默认状态的另一种方法是:
active = forms.BooleanField( widget=forms.CheckboxInput( attrs={ 'checked': True } ) )