django : BooleanField, 기본값을 true로 설정하는 방법은 무엇입니까?


107

django에서 BooleanField를 사용하고 있습니다. 기본적으로 생성되는 확인란은 선택되지 않은 상태입니다. 기본적으로 상태를 선택하고 싶습니다. 어떻게해야합니까?

답변:


184

바닐라 양식 (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})

2
고마워요 form = MyForm(initial={'my_field':True}), 문서에서 바로 찾지 못했습니다.
Paco

이 답변은 실제로 잘못 : 초기 값은 기본하지 @DW의에서 언급 한 값 대답
얼어 붙었다

142
from django.db import models

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

1
이 문서는 어디에 있습니까? 이 언급이다 initial(언 바운드 양식) 워드 프로세서는 아니지만default
사용자

7
이 답변에서 응답자는 양식 필드가 아닌 모델 필드를 사용하고 있습니다. 그 차이가 있습니다. 이것은 기본 kwarg를보기 위해 건너 뛰었 기 때문에 나를 넘어 뜨 렸습니다. 기본값은 유효한 형식이 아닙니다. 댓글이 0 개이므로이 답변을 좀 더 명확하게하기 위해 게시하고 싶었습니다.
Josh Brown

이것은 양식 모델 필드에서만 작동합니다. 또한 이니셜을 다르게 표시하기 위해 모델 기본값을 변경하는 것은 약간 많은데, 특히 초기 값을 설정하는 것이 매우 간단 할 때.
guival

이니셜은 이전 Django에서 가져온 것입니다. docs.djangoproject.com/en/2.0/ref/models/fields/#booleanfield
Sharpless512

6

django == 1.11을 사용하고 있습니다. 가장 많은 표를 얻은 대답은 실제로 잘못되었습니다. django에서 문서를 확인하면 다음과 같이 말합니다.

initial-이 필드의 초기 표시에 사용할 값입니다. 이 값이되어 있지 데이터가 주어지지 않는 경우, 대체로서 사용된다.

그리고 양식 유효성 검사 프로세스의 코드를 자세히 살펴보면 각 필드에 대해 양식이 실제 값을 얻기 위해 위젯 이라고 부르는 것을 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너무 유효합니다 . 감사.
동결

0

DJango 3.0에서 model.py의 BooleanField 기본값은 다음과 같이 설정됩니다.

class model_name(models.Model):
example_name = models.BooleanField(default=False)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.