如何在Django上将True设置为BooleanField的默认值?

2020/11/30 21:42 · python ·  · 0评论

BooleanField在Django中使用

默认情况下,其生成的复选框处于未选中状态。我希望默认情况下检查状态。我怎么做?

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

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

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

并且,如果您深入研究表单验证过程的代码,您会发现,对于每个字段,表单都将其称为小部件, value_from_datadict以获取实际值,因此这是我们可以注入默认值的地方。

为此BooleanField,我们可以继承CheckboxInput,覆盖defaultvalue_from_datadictinitfunction。

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中,像下面这样设置model.py中BooleanField的默认值:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
本文地址:http://python.askforanswer.com/ruhezaidjangoshangjiangtrueshezhiweibooleanfielddemorenzhi.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!