Answers:
如果您仅使用普通表单(而不是ModelForm),则可以设置字段初始值(https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field。首字母)喜欢
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)
最后,如果要在运行时动态选择默认情况下是否选择字段,则可以在初始化表单时使用表单的初始参数:
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
在文档中提到了(对于未绑定的表单),但没有提到default
我正在使用django == 1.11。得到最多投票的答案实际上是错误的。检查来自django的文档,它说:
initial-在此字段的初始显示中使用的值。如果未提供数据,则此值不会用作备用。
并且,如果您深入研究表单验证过程的代码,您会发现,对于每个字段,表单都将其称为小部件, 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
。谢谢。
form = MyForm(initial={'my_field':True})
,我没有立即在文档中找到它。