如何在 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】:

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

【讨论】:

【参考方案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_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 也有效。谢谢。【参考方案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 的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 上将复选框默认设置为 true

如何在 Django Admin 中默认将 user.is_staff 设置为 True? [关闭]

如何在 django 中为分组选项设置默认值

如何在 django 中为分组选项设置默认值

CSS在移动设备上将父宽度设置为0时,子溢出

如何在不同的窗口上将焦点设置为 QWidget