django: BooleanField, varsayılan değer true olarak nasıl ayarlanır?


107

Django'da BooleanField kullanıyorum. Varsayılan olarak, onun tarafından oluşturulan onay kutusu işaretlenmemiş durumdur, durumun varsayılan olarak kontrol edilmesini istiyorum, nasıl yapılır?

Yanıtlar:


185

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

2
Teşekkürler form = MyForm(initial={'my_field':True}), belgelerde hemen bulamadım.
Paco

Bu cevap aslında yanlış : başlangıç değeri , @DW cevabında
donduruldu

142
from django.db import models

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

1
Bu nerede belgeleniyor? initialDokümanlarda bahsediliyor (bağlantısız form için), ancak değildefault
kullanıcı

7
bu cevapta, cevaplayıcı bir form alanı değil bir model alanı kullanıyor. Fark buradadır. Bu beni tetikledi çünkü varsayılan kwarg'ı görmek için atladım. Varsayılan geçerli bir form değildir. Form kwarg. Sadece bu cevabı biraz temizlemek için göndermek istedim, çünkü 0 yorumu var.
Josh Brown

Bu yalnızca form modeli alanları için çalışır. Ayrıca, başlangıç ​​değerini farklı bir şekilde görüntülemek için model varsayılanını değiştirmek biraz fazla, özellikle de başlangıç ​​değerini ayarlarken çok basit.
guival


6

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, CheckboxInputvarsayılanı value_from_datadictve initiş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)

Bunun için Django 3.0de geçerli . Teşekkürler.
dondurulmuş

0

DJango 3.0'da model.py'deki bir BooleanField'ın varsayılan değeri şu şekilde ayarlanır:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.