Djangoのnullの扱い方

Posted by Ken on 1st, 2009

Djangoでnullをセットしようとした場合、ちょっとしたコツが必要。
コツというか、考え方としては突拍子なわけでもない。
ただ、知らないとどうしていいのかわかんない。

モデルフィールドリファレンス — Django v1.0 documentation
http://djangoproject.jp/doc/ja/1.0/ref/models/fields.html#django.db.models.fields.Field.null
まずはここに書いてあること。

空の文字列値は NULL ではなく空文字列として保存されることに注意して下さい。 null=True が使えるのは、整数型やブール型、日付のような、文字列ではないフィールド型の場合だけです。 null はデータベースでの記録操作にのみかかわるパラメタなので、フォーム上で空の値を入力できるようにしたければ blank=True も指定する必要があるでしょう (blank も参照してください)。

具体的には、

  • 文字列はnullを扱えない
  • nullをセットしたかったらnull=Trueを使う
  • ForeignKeyの場合はblank=True, null=Trueと併せて使う

ということ。

勝手な解釈ではあるが、

  • 空文字はわかるけど、文字が無いってなんか変じゃない?
  • nullにしたい場合は明示的に
  • ForeignKeyみたいな場合は未入力(blank)を許しつつ、参照してるんだからnullも許可させる必要がある

ってことなんじゃないかな。
なぜ、blankとnullみたいな、似たような項目があるのか?ということについては似て非なるものだからだと思ってる。
blankについては入力時のチェックに使う、validationに関する項目。
nullについてはデータの存在意義(意義というとちょっと違うかな)についての定義。
こう考えると、文字列はblankを許可する必要はあるかもしれないけど、値が無いってのはおかしいでしょ?だから、null=Trueなんて設定できないよ〜。
ForeignKeyを設定したく無いなら、未入力(blank)を許可しなきゃね。それとは別に、参照先が無い場合(null)があるからそれは別に定義しなきゃダメだよね。
ってことなんだと思う。

今のところ自分ではすっきりしてるのでいいかな?と思ってる。

Leave a Reply



Search


SUBSCRIBE

  • 最近のコメント

  • カテゴリー

  • タグ

    Amazon Android au BeagleBoard blog CMS Compiz Fusion Django DVD Google HT-03A iPhone ISMS Linux LUMIX LUMIX G1 MacBook MySQL Workbench OpenX Poken Python server Software Design SOY CMS TinyMCE Ubuntu Ubuntu 9.04 Vim VirtualBox WordPress wwwsqldesigner XenServer XMind しろいくも オトノハコ ハルフウェイ マンガ 岩岡 ヒサエ 帰省 広告 望遠鏡 桜井亜美 花粉症