Yanıtlar:
Yalnızca bir vanilya formu kullanıyorsanız (ModelForm değil), bir Alan başlangıç değeri belirleyebilirsiniz ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. ilk ) gibi
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Bir ModelForm kullanıyorsanız, model alanında ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ) ortaya çıkan ModelForm için geçerli olacak varsayılan bir değer ayarlayabilirsiniz. , sevmek
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Son olarak, çalışma zamanında alanınızın varsayılan olarak seçilip seçilmeyeceğini dinamik olarak seçmek istiyorsanız, formun ilk parametresini başlatırken kullanabilirsiniz :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
Dokümanlarda bahsediliyor (bağlantısız form için), ancak değildefault
Django == 1.11 kullanıyorum. Cevap en çok oyu almak aslında yanlıştır. Django'daki belgeye bakıldığında şöyle diyor:
ilk - Bu Alanın ilk ekranında kullanılacak bir değer. Bu değer olmayan veri verilmediği takdirde bir yedek olarak kullanılabilir.
Ve form doğrulama işleminin kodunu araştırırsanız, her alan için formun gerçek değeri elde etmek için widget'larını çağırdığını göreceksiniz value_from_datadict
, bu nedenle varsayılan değeri enjekte edebileceğimiz yer burasıdır.
Bunu yapmak için BooleanField
, CheckboxInput
varsayılanı value_from_datadict
ve init
işlevi devralabilir , geçersiz kılabiliriz .
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)
Ardından, oluştururken bu widget'ı kullanın BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
de geçerli . Teşekkürler.
form = MyForm(initial={'my_field':True})
, belgelerde hemen bulamadım.