【Django】モデルフィールド:オプションnullとblankの違いについて
2021.06.09 /
本記事ではDjangoのモデルフィールドにおける、フィールドオプションのnullとblankの違いについて解説していきます。
Djangoではモデルの仕組みを使いデータベースを操作します。
Djangoのモデル(models.py)の基本については以下の記事をご参照ください。
【Django】Model(モデル)とは: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はフォームのバリデーションに関係しているということです。
バリデーションとは、フォームに入力された内容の要件をチェックすることです
デフォルトのblank=Falseでは、対象のフォームフィールドが空欄の場合にエラーを発生させます。つまりフォームフィールドの空欄を許容しない(入力を必須)ようになります。
blank=Trueにした場合、対象のフォームフィールドの入力は必須ではなくなります。
例えばWebアプリケーションの問い合わせページなどで、年齢やメールアドレスの入力を必須にしない場合は、年齢フィールドやメールアドレスフィールドをblank=Trueに指定します。
nullとblankの4つのパターン
フィールドのオプションnullとblankには、それぞれFalseまたはTrueを指定できるため、以下に示す4つのパターンが存在するということです。
- null=False、blank=False
- null=True、blank=True
- null=False、blank=True
- 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でアプリケーション設計時に必ず必要になる知識です。