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

225👍

If you’re just using a vanilla form (not a ModelForm), you can set a Field initial value ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field.initial ) like

class MyForm(forms.Form):
    my_field = forms.BooleanField(initial=True)

If you’re using a ModelForm, you can set a default value on the model field ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), which will apply to the resulting ModelForm, like

class MyModel(models.Model):
    my_field = models.BooleanField(default=True)

Finally, if you want to dynamically choose at runtime whether or not your field will be selected by default, you can use the initial parameter to the form when you initialize it:

form = MyForm(initial={'my_field':True})

149👍

from django.db import models

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

12👍

I am using django==1.11. The answer get the most vote is actually wrong. Checking the document from django, it says:

initial — A value to use in this Field’s initial display. This value
is not used as a fallback if data isn’t given.

And if you dig into the code of form validation process, you will find that, for each fields, form will call it’s widget’s value_from_datadict to get actual value, so this is the place where we can inject default value.

To do this for BooleanField, we can inherit from CheckboxInput, override default value_from_datadict and init function.

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)

Then use this widget when creating BooleanField.

class ExampleForm(forms.Form):
    bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
👤D.W

4👍

I found the cleanest way of doing it is this.

Tested on Django 3.1.5

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

I found the answer here

3👍

In Django 3.0 the default value of a BooleanField in model.py is set like this:

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

1👍

Another way to check the default state in BooleanField is:

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

0👍

Both initial and default properties were not working for me, if that’s your case try this:

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

0👍

I tried to change inital of BooleanField:

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

but it didn’t work.

My solve:

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

It works like:

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

but we can’t call form in Generic editing views.
I think this is a great alternative to a regular call form object.

0👍

If default=True in models.BooleanField() below doesn’t work in models.py:

# "models.py"

class MyModel(models.Model):   # Here
    state = models.BooleanField(default=True)

Then, use the following solutions below in admin.py:

# "admin.py"

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        kwargs['initial'] = {'state': True}
        super().__init__(*args, **kwargs)

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

Or:

# "admin.py"

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['state'].widget.attrs['checked'] = True

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

Or:

# "admin.py"

class MyModelForm(forms.ModelForm):
    state = forms.BooleanField(initial=True, required=False)

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

Or:

# "admin.py"

class MyModelForm(forms.ModelForm):
    state = forms.BooleanField(
        widget=forms.CheckboxInput(
            attrs={
                'checked': True
            }
        )
    )

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

Or:

class MyModelForm(forms.ModelForm):
    class Meta:
        widgets = {
            'state': forms.CheckboxInput(attrs={'checked':True}),
        }

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm

Leave a comment