1. ホーム
  2. パイソン

[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?

2022-03-23 08:29:13

質問

djangoでデータベースフィールドを追加する場合、一般的にはこう書きます。

models.CharField(max_length=100, null=True, blank=True)

と同じことを行います。 ForeignKey , DecimalField などです。を持つことの基本的な違いは何ですか?

  1. null=True のみ
  2. blank=True のみ
  3. null=True , blank=True

に関して、異なる( CharField , ForeignKey , ManyToManyField , DateTimeField ) のフィールドを使用します。1/2/3を使用するメリット/デメリットは何ですか?

どのように解決するのですか?

null=True セット NULL (対 NOT NULL をDB内のカラムに追加してください。のような Django のフィールドタイプに対する空白の値。 DateTimeField または ForeignKey として格納されます。 NULL をDBに登録します。

blank は、そのフィールドがフォームで必須とされるかどうかを決定します。これには、管理画面とカスタムフォームが含まれます。もし blank=True の場合、そのフィールドは必須ではありません。 False は空白にできません。

この2つの組み合わせは非常に頻繁に使用されます。なぜなら、フォームのフィールドを空白にする場合、データベースで NULL の値を指定します。ただし、例外として CharFieldTextField であり、Django では 決して として保存されます。 NULL . 空白の値は、空文字列としてDBに格納されます( '' ).

いくつかの例を挙げます。

models.DateTimeField(blank=True) # raises IntegrityError if blank

models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form

明らかに、この2つのオプションは論理的な意味を持ちません。 null=True, blank=False あるフィールドをフォームでは常に必須とし、シェルのようなものでオブジェクトを扱うときはオプションとしたい場合)

models.CharField(blank=True) # No problem, blank is stored as ''

models.CharField(null=True) # NULL allowed, but will never be set as NULL

CHARTEXT として保存されることはありません。 NULL を使用しているため、Djangoでは null=True は不要です。しかし、手動でこれらのフィールドのいずれかを None として強制的に設定します。 NULL . それが必要なシナリオがある場合は、やはり null=True .