django:BooleanField,如何将默认值设置为true?


107

我在Django中使用BooleanField。默认情况下,它生成的复选框是未选中状态,我希望默认情况下选中该状态,该怎么做?

Answers:


184

如果您仅使用普通表单(而不是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})

2
感谢您的帮助form = MyForm(initial={'my_field':True}),我没有立即在文档中找到它。
Paco 2014年

这个答案实际上是错误的:@DW 答案中提到的初始不是默认
冻结

142
from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)

1
这在哪里记录?initial在文档中提到了(对于未绑定的表单),但没有提到default
用户

7
在此答案中,应答者使用的是模型字段,而不是表单字段。那就是区别所在。这让我绊倒了,因为我跳过了它只是看了默认的kwarg。默认不是有效的表单。只是想发布该内容,以使该答案更清晰一点,因为它对此有0条评论。
乔希·布朗

这仅适用于表单模型字段。另外,更改模型默认值只是为了以不同的方式显示初始值会有些许困难,特别是在设置初始值非常简单时。
吉瓦尔


6

我正在使用django == 1.11。得到最多投票的答案实际上是错误的。检查来自django的文档,它说:

initial-在此字段的初始显示中使用的值。如果未提供数据,则此值不会用作备用。

并且,如果您深入研究表单验证过程的代码,您会发现,对于每个字段,表单都将其称为小部件, 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。谢谢。
冻结

0

在DJango 3.0中,像下面这样设置model.py中BooleanField的默认值:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.