我在Django中使用BooleanField。默认情况下,它生成的复选框是未选中状态,我想默认选中状态,怎么做?
BooleanField
ulydmbyx1#
如果只是使用普通窗体(而不是ModelForm),则可以设置Field初始值(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,则可以在模型字段(www.example.com)上设置默认值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})
wz8daaqr2#
from django.db import models class Foo(models.Model): any_field = models.BooleanField(default=True)
cczfrluj3#
我用的是django==1.11,投票最多的答案其实是错误的,查看django的文档,它说:initial --在这个Field的初始显示中使用的值。如果没有给出数据,这个值 * 不 * 用作后备。如果深入研究表单验证过程的代码,您会发现,对于每个字段,表单都会调用它的widget的value_from_datadict来获取实际值,因此这是我们可以注入默认值的地方。要对BooleanField执行此操作,我们可以从CheckboxInput继承,覆盖默认的value_from_datadict和init函数。
value_from_datadict
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)
6mzjoqzu4#
在Django 3.0中,model.py中的布尔字段的默认值是这样设置的:
class model_name(models.Model): example_name = models.BooleanField(default=False)
ej83mcc05#
我发现最干净的方法是这样的。在Django 3.1.5上测试
class MyForm(forms.Form): my_boolean = forms.BooleanField(required=False, initial=True)
I found the answer here
b4lqfgs46#
检查BooleanField中默认状态的另一种方法是:
active = forms.BooleanField( widget=forms.CheckboxInput( attrs={ 'checked': True } ) )
vzgqcmou7#
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
yxyvkwin8#
我尝试更改布尔字段的首字母缩写:
def __init__(self, *args, **kwargs): super(UserConfirmForm,self).__init__(*args, **kwargs) self.fields['bool_field'].initial = True
但没有成功。我的解决方案:
def __init__(self, *args, **kwargs): kwargs['initial'] = {'bool_field': True} super(UserConfirmForm,self).__init__(*args, **kwargs)
其工作原理如下:
UserConfirmForm(initial={'bool_field':True})
但是我们不能在通用编辑视图中调用表单。我认为这是一个很好的替代常规调用表单对象的方法。
8条答案
按热度按时间ulydmbyx1#
如果只是使用普通窗体(而不是ModelForm),则可以设置Field初始值(https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field.initial),如下所示
如果您使用的是ModelForm,则可以在模型字段(www.example.com)上设置默认值https://docs.djangoproject.com/en/2.2/ref/models/fields/#default,该值将应用于生成的ModelForm,如
最后,如果要在运行时动态选择是否默认选择字段,可以在初始化表单时使用初始化参数:
wz8daaqr2#
cczfrluj3#
我用的是django==1.11,投票最多的答案其实是错误的,查看django的文档,它说:
initial --在这个Field的初始显示中使用的值。如果没有给出数据,这个值 * 不 * 用作后备。
如果深入研究表单验证过程的代码,您会发现,对于每个字段,表单都会调用它的widget的
value_from_datadict
来获取实际值,因此这是我们可以注入默认值的地方。要对
BooleanField
执行此操作,我们可以从CheckboxInput
继承,覆盖默认的value_from_datadict
和init
函数。然后在创建
BooleanField
时使用此小部件。6mzjoqzu4#
在Django 3.0中,model.py中的布尔字段的默认值是这样设置的:
ej83mcc05#
我发现最干净的方法是这样的。
在Django 3.1.5上测试
I found the answer here
b4lqfgs46#
检查BooleanField中默认状态的另一种方法是:
vzgqcmou7#
initial
和default
属性都不适用于我,如果是这种情况,请尝试以下操作:yxyvkwin8#
我尝试更改布尔字段的首字母缩写:
但没有成功。
我的解决方案:
其工作原理如下:
但是我们不能在通用编辑视图中调用表单。我认为这是一个很好的替代常规调用表单对象的方法。