null=True
blank=True
default = 0
違いは何ですか?何を使うの?
直接- Djangoモデルフィールド参照 :
Field.null
True
の場合、Djangoは空の値をNULL
としてデータベースに格納します。デフォルトはFalse
です。空の文字列値は常に
NULL
ではなく空の文字列として保存されることに注意してください。null=True
は、整数、ブール値、日付などの非文字列フィールドにのみ使用してください。null
パラメータはデータベースストレージにのみ影響するため(blank
を参照)、両方のタイプのフィールドで、フォームに空の値を許可する場合は、blank=True
も設定する必要があります。特別な理由がない限り、
null
やCharField
などの文字列ベースのフィールドでTextField
を使用しないでください。文字列ベースのフィールドにnull=True
がある場合、それは「データなし」に2つの可能な値があることを意味します。NULLと空の文字列です。ほとんどの場合、「データなし」には2つの値を設定する必要があります。 Django慣例では、NULL
ではなく空の文字列を使用します。
Field.blank
True
の場合、フィールドは空白にできます。デフォルトはFalse
です。これは
null
とは異なることに注意してください。null
は純粋にデータベース関連ですが、blank
は検証関連です。フィールドにblank=True
がある場合、Djangoの管理サイトでの検証により、空の値を入力できます。フィールドにblank=False
がある場合、そのフィールドは必須です。
Field.default
フィールドのデフォルト値。これは、値または呼び出し可能なオブジェクトにすることができます。呼び出し可能の場合、新しいオブジェクトが作成されるたびに呼び出されます。
あなたはこれすべてを理解していませんか?
docs から:
null
Trueの場合、Djangoはデータベースに空の値をNULLとして格納します。デフォルトはFalseです。
blank
Trueの場合、フィールドを空白にすることができます。デフォルトはFalseです。
default
フィールドのデフォルト値。
「default
」を使用して、コードで明示的に値を設定しない場合に、問題のフィールドに使用される値を設定できます。
フォームの検証には「blank
」を使用します-blank = Trueを指定すると、フィールドに空の値を設定できます
空の値をDBに「null」として格納する場合は、「null
」を使用します。ただし、多くの場合、特定のフィールドに応じて、空白の値を空の文字列または0に設定することが推奨されます。
実装の観点から:
「空白」フィールドはすべてのフォームに対応しています。この値がフォームで必要であり、対応するフォーム検証が行われるかどうかを指定します。 'True'は空の値を許可します。
「null」フィールドはDBレベルに対応します。 DBでNULLまたはNOT NULLとして設定されます。
したがって、adminでblank = trueを指定してフィールドを空のままにすると、DBにNULLが入力されます。これで、DBの特定の列がNOT NULLとして指定されている場合、エラーがスローされる可能性があります。
Null:データベースに関連しています。特定のデータベース列がnull値を受け入れるかどうかを定義します。
空白:検証に関連しています。 form.is_valid()を呼び出すとき、フォームの検証中に使用されます。
デフォルト:このフィールドに値を指定しない場合、常に指定された値(デフォルト値)がフィールドに格納されます。
Nullおよび空白のデフォルト値はFalseです。
そうは言っても、null = Trueとblank = Falseのフィールドがあっても問題ありません。データベースレベルではフィールドはNULLでもかまいませんが、アプリケーションレベルでは必須フィールドです。
さて、ほとんどの開発者が誤解しているのは、CharFieldやTextFieldなどの文字列ベースのフィールドにnull = Trueを定義することです。それをしないでください。そうしないと、「データなし」に2つの値、つまりNoneと空の文字列が含まれることになります。 「データなし」の2つの可能な値を持つことは冗長です。 Django規約は、NULLではなく空の文字列を使用することです。