2017-02-26 5 views
2

documentationでは、私はこれに対する答えを見つけることができませんでした。djangoのモデルフィールドオプション `` blank``と `` null``のデフォルト値は設定されていません。

フィールドを空白にしたい場合は、明示的にblank=Trueを設定する必要がありますか?

EDIT:私は盲目です。または愚かです。私にそれを指摘していただきありがとうございます;)

答えて

2

私はあなたがドキュメントをリンクしていることを知っていますが、私はこれを明示的に同じ質問に出くわす人のために置いています。あなたの見出しの質問への答えは明示的かつ明確に文書にありますが、どちらもデフォルトでFalseです。フィールドをblank=Trueにしたい場合は、すべてのフィールドに手動で指定する必要があります。

ブランクがフォームのためです:

Trueの場合、フィールドは空白に許可されています。デフォルトはFalseです。

これはnullと異なることに注意してください。 nullは純粋に データベース関連ですが、空白は検証に関連しています。フィールドに のblank = Trueが指定されている場合、フォームの検証によって空の値が入力されます。 フィールドに空白=偽がある場合は、フィールドが必要です。

Nullは、そのフィールドに何も記録されていないレコードを保存すると、データベースに格納されているものです。この場合も、フィールド属性はnull=False

です。Trueの場合、Djangoは空の値をデータベースにNULLとして格納します。デフォルトはFalseです。

CharFieldや TextFieldなどの文字列ベースのフィールドではnullを使用しないでください。空の文字列値は常にNULLではなく空の文字列 として保存されるためです。文字列ベースのフィールドがnull = Trueの場合、その は、 "データなし"の2つの値、つまりNULLと空の 文字列を持つことを意味します。ほとんどの場合、 "データなし"という2つの値を持つのは冗長ですが、DjangoではNULLではなく空の文字列を使用します。文字列ベースおよび非文字列ベースのフィールドの両方のために、あなたはまた、ブランクに設定する が必要になります

= Trueのあなたは ヌルパラメータのみがデータベースストレージに影響を与えるとして、フォームに空の値を許可したい場合(空白を参照) 。

は、フォームが空白になりたいと思い機会がたくさんありますが、データベースエントリはnot Nullこと - たとえば、you were specifying your own custom slug on model saveのためならば。

これはもちろん、あなたがメインのFieldクラスから派生したカスタムも同じデフォルト動作を持つことを意味します。それが本当に気になるなら、あなたは希望の振る舞いでFieldクラスをオーバーライドすることができますが、それはあなたを追いかける他の人のためにデバッグするのが本当に気が利きです。

+0

"空の文字列値は常にNULL_ではなく空の文字列として格納されるため、CharFieldやTextFieldなどの文字列ベースのフィールドではnullを使用しないでください。"私はこの文をよりよく理解したいと思います。彼女は 'null = True'の使用を避けるほうがよいという意味です。なぜなら、文字列ベースのフィールドに「データなし」の値を保存したいのであれば、空の文字列を保存するだけなのですから? – Caco

+1

はい、そうでなければ、データなしの値としてNullと ''''の両方を持つことができます。これらのフィールドに 'null = False'のままにして、値を保存しないと、値は自動的に空の文字列 '' ''になります。 – Withnail

関連する問題