web-dev-qa-db-ja.com

Django models.pyで、デフォルト、null、空白の違いは何ですか?

  • null=True
  • blank=True
  • default = 0

違いは何ですか?何を使うの?

56
TIMEX

直接- Djangoモデルフィールド参照

Field.null

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

空の文字列値は常にNULLではなく空の文字列として保存されることに注意してください。 null=Trueは、整数、ブール値、日付などの非文字列フィールドにのみ使用してください。 nullパラメータはデータベースストレージにのみ影響するため(blankを参照)、両方のタイプのフィールドで、フォームに空の値を許可する場合は、blank=Trueも設定する必要があります。

特別な理由がない限り、nullCharFieldなどの文字列ベースのフィールドでTextFieldを使用しないでください。文字列ベースのフィールドにnull=Trueがある場合、それは「データなし」に2つの可能な値があることを意味します。NULLと空の文字列です。ほとんどの場合、「データなし」には2つの値を設定する必要があります。 Django慣例では、NULLではなく空の文字列を使用します。

 

Field.blank

Trueの場合、フィールドは空白にできます。デフォルトはFalseです。

これはnullとは異なることに注意してください。 nullは純粋にデータベース関連ですが、blankは検証関連です。フィールドにblank=Trueがある場合、Djangoの管理サイトでの検証により、空の値を入力できます。フィールドにblank=Falseがある場合、そのフィールドは必須です。

 

Field.default

フィールドのデフォルト値。これは、値または呼び出し可能なオブジェクトにすることができます。呼び出し可能の場合、新しいオブジェクトが作成されるたびに呼び出されます。

あなたはこれすべてを理解していませんか?

48
Chris Morgan

docs から:

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

blank Trueの場合、フィールドを空白にすることができます。デフォルトはFalseです。

defaultフィールドのデフォルト値。

default」を使用して、コードで明示的に値を設定しない場合に、問題のフィールドに使用される値を設定できます。

フォームの検証には「blank」を使用します-blank = Trueを指定すると、フィールドに空の値を設定できます

空の値をDBに「null」として格納する場合は、「null」を使用します。ただし、多くの場合、特定のフィールドに応じて、空白の値を空の文字列または0に設定することが推奨されます。

15
Ben Regenspan

私はあなたがすでにあなたの答えを持っていることを知っていますが、今日まで、置くかどうかを判断することは困難ですnull=Trueまたはblank=Trueまたはbothをフィールドに。私は個人的に、開発者に非常に多くのオプションを提供するのはかなり役に立たず混乱していると思います。ヌルまたはブランクを必要に応じて処理します。

私はこの表に従います: When to use null and blank

When to use null and blank

2
saran3h

実装の観点から:

「空白」フィールドはすべてのフォームに対応しています。この値がフォームで必要であり、対応するフォーム検証が行われるかどうかを指定します。 'True'は空の値を許可します。

「null」フィールドはDBレベルに対応します。 DBでNULLまたはNOT NULLとして設定されます。

したがって、adminでblank = trueを指定してフィールドを空のままにすると、DBにNULLが入力されます。これで、DBの特定の列がNOT NULLとして指定されている場合、エラーがスローされる可能性があります。

1
aliasav

Null:データベースに関連しています。特定のデータベース列がnull値を受け入れるかどうかを定義します。

空白:検証に関連しています。 form.is_valid()を呼び出すとき、フォームの検証中に使用されます。

デフォルト:このフィールドに値を指定しない場合、常に指定された値(デフォルト値)がフィールドに格納されます。

Nullおよび空白のデフォルト値はFalseです。

そうは言っても、null = Trueとblank = Falseのフィールドがあっても問題ありません。データベースレベルではフィールドはNULLでもかまいませんが、アプリケーションレベルでは必須フィールドです。

さて、ほとんどの開発者が誤解しているのは、CharFieldやTextFieldなどの文字列ベースのフィールドにnull = Trueを定義することです。それをしないでください。そうしないと、「データなし」に2つの値、つまりNoneと空の文字列が含まれることになります。 「データなし」の2つの可能な値を持つことは冗長です。 Django規約は、NULLではなく空の文字列を使用することです。

0
sharif_42