django: BooleanField, bagaimana cara menyetel nilai default ke true?


107

Saya menggunakan BooleanField di django. Secara default kotak centang yang dihasilkan olehnya adalah status tidak dicentang, saya ingin status dicentang secara default, bagaimana melakukannya?

Jawaban:


184

Jika Anda hanya menggunakan formulir vanilla (bukan ModelForm), Anda dapat menyetel nilai awal Bidang ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. awal ) seperti

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

Jika Anda menggunakan ModelForm, Anda dapat menyetel nilai default pada bidang model ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), yang akan diterapkan ke ModelForm yang dihasilkan , Suka

class MyModel(models.Model):
    my_field = models.BooleanField(default=True)

Terakhir, jika Anda ingin secara dinamis memilih pada waktu proses apakah bidang Anda akan dipilih secara default atau tidak, Anda dapat menggunakan parameter awal ke formulir saat Anda menginisialisasinya :

form = MyForm(initial={'my_field':True})

2
Terima kasih form = MyForm(initial={'my_field':True}), saya tidak langsung menemukannya di dokumentasi.
Paco

Jawaban ini sebenarnya salah : nilai awal bukanlah nilai default seperti yang disebutkan dalam jawaban
dibekukan

142
from django.db import models

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

1
Dimana ini didokumentasikan? Ada yang disebutkan initialdi dokumen (untuk formulir tidak terikat), tetapi tidakdefault
pengguna

7
dalam jawaban ini, penjawab menggunakan kolom model, bukan kolom formulir. Di situlah perbedaannya. Ini membuat saya tersandung karena saya melewatkannya hanya untuk melihat kwarg default. Default bukanlah formulir yang valid. Formulir kwarg. Hanya ingin memposting itu untuk sedikit menghapus jawaban ini, karena ada 0 komentar untuk itu.
Josh Brown

Ini hanya berfungsi untuk bidang model formulir. Selain itu, mengubah default model hanya untuk menampilkan awal secara berbeda sedikit banyak, khususnya saat menyetel nilai awal sangatlah sederhana.
guival


6

Saya menggunakan django == 1.11. Jawaban mendapatkan suara terbanyak sebenarnya salah. Memeriksa dokumen dari django, dikatakan:

inisial - Nilai yang akan digunakan dalam tampilan awal Bidang ini. Nilai ini tidak digunakan sebagai fallback jika data tidak diberikan.

Dan jika Anda menggali kode proses validasi formulir, Anda akan menemukan bahwa, untuk setiap bidang, formulir akan memanggilnya widget value_from_datadict untuk mendapatkan nilai sebenarnya, jadi di sinilah kita dapat memasukkan nilai default.

Untuk melakukan ini BooleanField, kita dapat mewarisi from CheckboxInput, override default value_from_datadictdan initfunction.

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)

Kemudian gunakan widget ini saat membuat BooleanField.

class ExampleForm(forms.Form):
    bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)

Berlaku Django 3.0juga. Terima kasih.
dibekukan

0

Di DJango 3.0 nilai default dari BooleanField di model.py disetel seperti ini:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.