programing

장고에서 부울 필드의 기본값으로 True를 설정하는 방법은 무엇입니까?

javajsp 2023. 9. 11. 21:27

장고에서 부울 필드의 기본값으로 True를 설정하는 방법은 무엇입니까?

사용하고 있습니다.BooleanField장고에서

기본적으로 해당 확인란에 의해 생성된 확인란은 선택되지 않은 상태입니다.나는 기본적으로 상태를 확인하길 원합니다.그걸 어떻게 하는 거죠?

(모델폼이 아닌) 바닐라 폼만 사용하는 경우와 같이 필드 초기값(https://docs.djangoproject.com/en/2.2/ref/forms/fields/ #django.forms.Field.initial)을 설정할 수 있습니다.

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

모델 양식을 사용하는 경우 모델 필드에 기본값(https://docs.djangoproject.com/en/2.2/ref/models/fields/ #default)을 설정할 수 있으며, 이 값은 다음과 같이 결과 모델 양식에 적용됩니다.

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을 사용하고 있습니다.가장 많은 표를 얻은 답은 사실 틀렸습니다.장고에서 문서를 확인해보니 다음과 같이 적혀있습니다.

initial - 필드의 초기 표시에 사용할 값입니다.이 값은 데이터가 제공되지 않은 경우 폴백으로 사용되지 않습니다.

양식의 유효성 검사 프로세스를 자세히 살펴보면, 각 필드에 대해 양식이 위젯의 이라고 부르는 것을 발견할 수 있습니다. value_from_datadict실제 값을 얻기 위해서, 여기가 기본값을 주입할 수 있는 곳입니다.

이 작업을 수행하려면 다음과 같습니다.BooleanField, 우리는 물려받을 수 있습니다.CheckboxInput, 기본값 재정의value_from_datadict그리고.init기능.

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)

가장 깨끗한 방법은 이것입니다.

장고 3.1.5에서 테스트 완료

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

여기서 답을 찾았습니다.

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

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

BooleanField에서 기본 상태를 확인하는 또 다른 방법은 다음과 같습니다.

   active = forms.BooleanField(
    widget=forms.CheckboxInput(
        attrs={
            'checked': 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의 initial을 변경하려고 했습니다.

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

일반 편집 보기에서는 폼을 호출할 수 없습니다.저는 이것이 일반적인 호출 양식 개체에 대한 훌륭한 대안이라고 생각합니다.

한다면default=True모델로아래 BooleanField()가 작동하지 않습니다.models.py:

# "models.py"

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

그러면 아래의 솔루션을 사용합니다.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

또는:

# "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

또는:

# "admin.py"

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

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

또는:

# "admin.py"

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

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

또는:

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

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

언급URL : https://stackoverflow.com/questions/5190313/how-to-set-true-as-default-value-for-booleanfield-on-django