开发者

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

I am using BooleanField in Django.

By default, the checkbox generated by it is unchecked state. I want the state to be checked by default. How do 开发者_开发知识库I do that?


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})


from django.db import models

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


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)


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)


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


Another way to check the default state in BooleanField is:

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


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


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜