장고에서 부울 필드의 기본값으로 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
'programing' 카테고리의 다른 글
CSS에서 최대 문자 길이 설정 (0) | 2023.09.11 |
---|---|
링크된 서버에 대한 "IF EXISTRESS" 테스트가 있습니까? (0) | 2023.09.11 |
Android 내장 메모리에서 비트맵/이미지 저장 및 읽기 (0) | 2023.09.06 |
mysql에서 time_format을 선택하는 이유(DATE_ADD(time('23:30')), INTERVAL 50MINET, "%k:%i") 반환은 0:20이 아닌 24:20입니다. (0) | 2023.09.06 |
Oracle에서 row_number 속도를 높이려면 어떻게 해야 합니까? (0) | 2023.09.06 |