簡體   English   中英

如何將 True 設置為 Django 上 BooleanField 的默認值?

[英]How to set True as default value for BooleanField on Django?

我在 Django 中使用BooleanField

默認情況下,它生成的復選框是未選中的 state。我希望默認選中 state。 我怎么做?

如果您只是使用普通表單(而不是 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 檢查文檔,它說:

初始 - 在此字段的初始顯示中使用的值。 如果未提供數據,則此值不用作后備。

如果你深入研究表單驗證過程的代碼,你會發現,對於每個字段,表單都會調用它的小部件的value_from_datadict來獲取實際值,所以這是我們可以注入默認值的地方。

要為BooleanField執行此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)
from django.db import models

class Nepal(models.Model)
     Is_active = models.BooleanField(default=True)

在 Django 3.0 中,model.py 中BooleanField的默認值設置如下:

class model_name(models.Model):
    example_name = models.BooleanField(default=False)

我發現最干凈的方法是這樣。

在 Django 3.1.5 上測試

class MyForm(forms.Form):
    my_boolean = forms.BooleanField(required=False, initial=True)

我在這里找到了答案

initial屬性和default屬性都不適用於我,如果您是這種情況,請嘗試以下操作:

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

檢查 BooleanField 中默認狀態的另一種方法是:

   active = forms.BooleanField(
    widget=forms.CheckboxInput(
        attrs={
            'checked': True
        }
    )
  )

我試圖更改 BooleanField 的首字母:

def __init__(self, *args, **kwargs):
    super(UserConfirmForm,self).__init__(*args, **kwargs)
    self.fields['bool_field'].initial = True

但它沒有用。

我的解決方法:

def __init__(self, *args, **kwargs):
    kwargs['initial'] = {'bool_field': True}
    super(UserConfirmForm,self).__init__(*args, **kwargs)

它的工作原理如下:

UserConfirmForm(initial={'bool_field':True})

但我們不能在通用編輯視圖中調用表單。 我認為這是常規呼叫表 object 的絕佳替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM