django:BooleanField、デフォルト値をtrueに設定する方法は?


107

私はdjangoでBooleanFieldを使用しています。デフォルトで生成されたチェックボックスはチェックされていない状態です。デフォルトで状態をチェックしたいのですが、どうすればいいですか?

回答:


184

(ModelFormではなく)単純なフォームを使用している場合は、フィールドの初期値を設定できます(https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field。初期)のような

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

ModelFormを使用している場合は、モデルフィールド(https://docs.djangoproject.com/en/2.2/ref/models/fields/#default)にデフォルト値を設定できます。これは、結果のModelFormに適用されます、 お気に入り

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

最後に、フィールドがデフォルトで選択されるかどうかを実行時に動的に選択する場合は、フォームを初期化するときにフォームの初期パラメーターを使用できます。

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

2
のおかげform = MyForm(initial={'my_field':True})で、ドキュメントにすぐに見つかりませんでした。
Paco 2014

この答えは、実際には間違っている初期値は、デフォルトではありません @DWの中で述べたように価値の答え
フリーズ

142
from django.db import models

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

1
これはどこに文書化されていますか?そこのの言及initial(結合していないフォームの)ドキュメントではなくdefault
ユーザー

7
この回答では、回答者はフォームフィールドではなくモデルフィールドを使用しています。それが違いです。デフォルトのクワルグを見るためだけにスキップしたので、これは私をつまずかせました。デフォルトは有効なフォームではありません。フォームkwarg。コメントが0なので、この回答を少し明確にするためにそれを投稿したかっただけです。
Josh Brown

これはフォームモデルフィールドでのみ機能します。また、初期値を別の方法で表示するためだけにモデルのデフォルトを変更することは、特に初期値の設定が非常に簡単な場合に、少し多くなります。
ギヴァル


6

私はdjango == 1.11を使用しています。最も多くの票を獲得する答えは実際には間違っています。djangoからドキュメントをチェックすると、それは言う:

initial-このフィールドの初期表示で使用する値。この値がされていないデータが与えられていない場合のフォールバックとして使用します。

そして、フォーム検証プロセスのコードを掘り下げると、各フィールドについて、フォームが実際の値を取得するためにウィジェットのウィジェット を呼び出すことがわかります。そのvalue_from_datadictため、ここがデフォルト値を注入できる場所です。

これをで行うにはBooleanField、から継承しCheckboxInput、デフォルトvalue_from_datadictinit関数をオーバーライドします。

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)

にも有効ですDjango 3.0。ありがとう。
凍結

0

DJango 3.0では、model.pyのBooleanFieldのデフォルト値は次のように設定されています:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.