如何在 Django 上将 True 设置为 BooleanField 的默认值?
Posted
技术标签:
【中文标题】如何在 Django 上将 True 设置为 BooleanField 的默认值?【英文标题】:How to set True as default value for BooleanField on Django? 【发布时间】:2011-07-08 14:23:24 【问题描述】:我在 Django 中使用BooleanField
。
默认情况下,它生成的复选框是未选中状态。我希望默认检查状态。我该怎么做?
【问题讨论】:
【参考方案1】:在 BooleanField 中检查默认状态的另一种方法是:
active = forms.BooleanField(
widget=forms.CheckboxInput(
attrs=
'checked': True
)
)
【讨论】:
【参考方案2】: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
【讨论】:
【参考方案3】:在 Django 3.0 中,model.py 中 BooleanField 的默认值设置如下:
class model_name(models.Model):
example_name = models.BooleanField(default=False)
【讨论】:
【参考方案4】:我发现最干净的方法是这样。
在 Django 3.1.5 上测试
class MyForm(forms.Form):
my_boolean = forms.BooleanField(required=False, initial=True)
I found the answer here
【讨论】:
【参考方案5】:如果您只是使用普通表单(不是 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)
,我没有立即在文档中找到它。
这个答案实际上是 wrong : initial value is not default value 正如@D.W. answer【参考方案6】:
我正在使用 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
也有效。谢谢。【参考方案7】:
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
【讨论】:
这是在哪里记录的?文档中提到了initial
(对于未绑定的形式),但没有提到default
在这个答案中,回答者使用的是模型字段,而不是表单字段。这就是区别所在。这让我大吃一惊,因为我跳过它只是为了查看默认的 kwarg。默认值不是有效的 forms.Form kwarg。只是想发布一下以澄清这个答案,因为它有 0 条评论。
这仅适用于表单模型字段。另外,改变模型默认值只是为了不同地显示初始值有点多,特别是在设置初始值非常简单的时候。
initial 来自旧版 Django。 docs.djangoproject.com/en/2.0/ref/models/fields/#booleanfield以上是关于如何在 Django 上将 True 设置为 BooleanField 的默认值?的主要内容,如果未能解决你的问题,请参考以下文章