1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

nullとblankオプションの違い

Djangoのモデルフィールドを設定する際に、オプションで設定するnullとblankはどう違のか。

一般的には

nullはデータベースの中身が空かどうか、blankはフォーム送信時の入力が空であるかどうか

であるとされています。

デフォルトではnullもblankもどちらもFalseで、それぞれデータベースの中身が空でないこと、フォーム送信時の入力が必須であると要求していることになります。ではなぜ、別々にオプションを設定する必要があるのでしょうか、以下の4パターンを事例に整理してみます。

1.null=False, blank=Falseの場合(デフォルト)

直訳すると「フォーム送信時にこのフィールドの入力は必須です。データベースに格納されるデータも空であってはいけません」ということになります。
ユーザー情報の入力画面で、Emailなどの必須項目のフィールド設定を行う際にはよく使うオプション設定になります。この設定はデフォルトになっているので、入力必須フィールドはnullとblankのオプション設定は特に必要ないということになります。

2.null=True, blank=Trueの場合

直訳すると「フォーム送信時にこのフィールド入力は必須ではありません。データベースに格納されるデータも空で問題ありません」ということになります。
ユーザー情報の入力画面で外部リンクなど任意項目のフィールド設定を行う際によく使うオプションになります。

3.null=False, blank=Trueの場合

直訳すると「フォーム送信時にこのフィールドの入力は必須ではありません。しかしデータベースに格納されるデータは空(null)であってはいけません」ということになります。
これは特殊な例で、未入力のフィールドを送信するとImageFieldやDateFieldなどはデータベースにnullが格納されてしまいます。一方でCharFieldやTextFieldなどの文字列型である場合は、空の値はnullではなく、空文字列として格納されます。そのため文字列を扱うフィールドに限り使用可能なオプション設定であると言えます。

4.null=True, blank=Falseの場合

直訳すると「フォーム送信時にこのフィールドの入力は必須です。しかしデータベースに格納されるデータは空であっても構いません」ということになります。
このパターンも使う機会が非常に少ないのではないかと思います。

まとめ

  • nullはデータベースに格納される値が空(null)でもいいかどうか、blankはフォーム送信時に入力必須フィールドであるかどうか。
  • デフォルトではnull、blankオプションはどちらもFalseで、入力必須フィールドであるとともに、データベースに(null以外の)何かしらの値が入っている必要がある。
  • 必須項目でなく、任意項目のフィールドにはnull、blankオプションをどちらもTrueに設定する。
  • 基本的にはnull、blankどちらもFalseかTrueで統一されて使われる場面が多い

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?