【问题标题】:How to set True as default value for BooleanField on Django?如何在 Django 上将 True 设置为 BooleanField 的默认值?
【发布时间】:2011-07-08 14:23:24
【问题描述】:

我在 Django 中使用BooleanField

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

【问题讨论】:

    标签: python django django-models


    【解决方案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 条评论。
            • 这仅适用于表单模型字段。另外,改变模型默认值只是为了不同地显示初始值有点多,特别是在设置初始值非常简单的时候。
            猜你喜欢
            • 1970-01-01
            • 2015-05-05
            • 1970-01-01
            • 2021-03-17
            • 2013-01-28
            • 1970-01-01
            • 1970-01-01
            • 2016-05-04
            • 1970-01-01
            相关资源
            最近更新 更多