【Django】モデルフィールド:オプションnullとblankの違いについて

2021.06.09 /

【Django】モデルフィールド:オプションnullとblankの違いについて

本記事ではDjangoのモデルフィールドにおける、フィールドオプションのnullblankの違いについて解説していきます。

Djangoではモデルの仕組みを使いデータベースを操作します。
Djangoのモデル(models.py)の基本については以下の記事をご参照ください。

models.pyにはモデルを定義し、その定義内にフィールドを1つ以上指定します。

そしてモデルのフィールドを指定するときにオプションとして、nullやblankをどうするか指定できます。

このnullとblankがそれぞれどういった違いがあり、どのような用途で使われるのか。
これがわかっていないとDjangoとデータベースを連携させる際や、フォームを使う際にうまくいかない場合があります。

本記事を通してnullとblankの違いを理解していきましょう。

フィールド

フィールドとは、モデルの定義(models.py)で必ず1つ以上指定する必要がある項目です。
データベースでいうと、テーブルのカラムにあたります。

フィールドはmodels.pyの中で次のように定義します。

class モデル名(models.Model):
  フィールド名 = models.フィールドの型(フィールドのオプション)

上記の「フィールドのオプション」で、本記事のテーマであるnullやblankが指定できます。
以下にblankを指定したときの例を記します。

name = models.CharField(max_length=255, blank=True)

nullとblankにはTrueまたはFalseが指定できます。
デフォルトではbullとblankはどちらもFalseです。

これらnullとblankの違いを正確に把握せずに、同じような処理をしていると考える人もいます。
しかしこれらは大きく異なっており、違いを正確に把握することは非常に重要です。

次項よりnullとblankについて詳しく解説していきます。

null

フィールドで指定できるオプションnullは、
データをデータベースに登録する際、そのフィールドのデータが空でも登録するかどうかを指定します。

デフォルトのnull=Falseでは、対象のフィールドデータが空(null)の場合はデータベースに登録されることなくエラーが発生します。

null=Trueにした場合、空(null)のデータを許容し、対象フィールドのデータが空でもデータベースに登録できます。

注意点としては、null=Trueと指定できるのは、IntegerField(整数)やDateField(日付)のような日付型などです。

CharFieldのような文字列型にはnull=Trueでは指定しません。

なぜなら、CharFieldには空(null)が存在せず、文字列が空のときは空文字が入るからです。

blank

フィールドで指定できるオプションblankは、
フォームからデータを送信する際、そのフィールドの入力を必須にするかどうかを指定します。

つまりblankはフォームのバリデーションに関係しているということです。

IT用語の確認

バリデーションとは、フォームに入力された内容の要件をチェックすることです

デフォルトのblank=Falseでは、対象のフォームフィールドが空欄の場合にエラーを発生させます。つまりフォームフィールドの空欄を許容しない(入力を必須)ようになります。

blank=Trueにした場合、対象のフォームフィールドの入力は必須ではなくなります。

例えばWebアプリケーションの問い合わせページなどで、年齢やメールアドレスの入力を必須にしない場合は、年齢フィールドやメールアドレスフィールドをblank=Trueに指定します。

nullとblankの4つのパターン

フィールドのオプションnullとblankには、それぞれFalseまたはTrueを指定できるため、以下に示す4つのパターンが存在するということです。

  1. null=False、blank=False
  2. null=True、blank=True
  3. null=False、blank=True
  4. null=True、blank=False

nullとblankのデフォルト値はFalseなので、上記1番はデフォルトの設定値です。

それぞれのパターンの意味と使い方を以下で解説していきます。

null=False、blank=False

null=False、blank=Falseはデフォルト値のため、特にフィールドに指定しない限りこの設定となります。

この設定が意味するのは、
対象フィールドのフォームは入力必須かつデータベースへ空の値は保存不可
ということです。

この設定は、例えば本のデータベースを作成するときに、書名フィールドや著者名フィールドを入力必須にする際に使います。

null=True、blank=True

null=True、blank=Trueが意味するのは、
対象フィールドのフォームは入力必須でなく、データベースへ空の値は保存可能
ということです。

この設定は、例えば本のデータベースを作成するときに、値段フィールドに使用することができます。
本の値段はわかれば入れればいいですし、入れなければ空を意味するnullが保存されます。

null=False、blank=True

null=False、blank=Trueが意味するのは、
対象フィールドのフォームは入力必須でなく、データベースへ空の値は保存不可
ということです。

CharFieldやTextFieldといった文字列型でしか設定することはできません。
なぜなら文字列型はフォーム入力が空のとき、空文字を保存するためnull=Falseの条件を満たすからです。

DateFieldなど文字列型以外のフィールドで指定しないように注意してください。

null=True、blank=False

null=True、blank=Falseが意味するのは、
対象フィールドのフォームは入力必須であり、データベースへ空の値は保存可能
ということです。

まとめ

本記事「【Django】モデルフィールド:オプションnullとblankの違いについて」はいかがでしたか。

フィールドのオプションnullとblankの違いは、Djangoでアプリケーション設計時に必ず必要になる知識です。