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

Bin*_*hen 94 django

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

Mic*_*nor 162

如果您只是使用vanilla形式(而不是ModelForm),则可以设置Field初始值(http://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.Field.初始)喜欢

class MyForm(forms.Form):
    my_field = forms.BooleanField(initial=True)
Run Code Online (Sandbox Code Playgroud)

如果您正在使用ModelForm,则可以在模型字段(http://docs.djangoproject.com/en/dev/ref/models/fields/#default)上设置默认值,该值将应用于生成的ModelForm , 喜欢

class MyModel(models.Model):
    my_field = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

最后,如果要在运行时动态选择是否默认选择字段,则可以在初始化时使用表单的初始参数:

form = MyForm(initial={'my_field':True})
Run Code Online (Sandbox Code Playgroud)

  • 感谢`form = MyForm(initial = {'my_field':True}))`,我在文档中没有立即找到它。 (2认同)

小智 135

from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

  • 在这个答案中,回答者使用的是模型字段,而不是表单字段.这就是差异所在.这让我感到惊讶,因为我跳过它只是为了看到默认的kwarg.默认不是有效的form.Form kwarg.只想发布一下,以便稍微澄清这个答案,因为它有0评论. (7认同)
  • [这里](https://docs.djangoproject.com/en/dev/ref/models/fields/#default) (4认同)

D.W*_*D.W 9

我正在使用 django==1.11。得票最多的答案其实是错误的。从 django 检查文档,它说:

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

如果你深入研究表单验证过程的代码,你会发现,对于每个字段,表单都会调用它的小部件 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)
Run Code Online (Sandbox Code Playgroud)

然后在创建BooleanField.

class ExampleForm(forms.Form):
    bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Run Code Online (Sandbox Code Playgroud)