2011-09-27 19 views
7

私は文字列の中に何も挿入しないと、form fieldというフォームに空の文字列として''という文字列が取り込まれます。django nullと空の文字列

しかし、form fieldの整数を何も挿入しないと、フォームには[null]という文字が取り込まれます。

これは良い方法ですか?文字列はnullでなければならないでしょうか?

答えて

5

を参照してください。文字列がnullであることが許されている場合、空文字列を持つ方法は2つあります:null""です。これはチェックする複数の値を与えます。これは非効率的で面倒です。

これはDjango conventionですが、あなたはnullの必要性がない限り""より異なる何かを意味、すべてのアプリケーションにお勧めします。

+7

私のデータベースでフィールドをALLOW NULLに設定した場合、空の文字列ではなく、NULLとして格納されると思います。 Djangoが規則を持っているのは良いですが、Djangoがデータベースにアクセスする唯一のシステムであるとは限りません。別のアプリケーションがNULLを格納できる場合は、nullと空の文字列をチェックする必要があります。しかし、単純な ''値ではない ''はPythonで両方をチェックします。 – six8

+6

これは 'djangoの練習'かもしれませんが、一般的に空の文字列を使って欠落したデータを表現するのは悪い習慣です。それがNULLのためのものです。私は本当にこれがdjangoの標準的な練習ではなかったと思います。 – Darren

+0

テンプレートで 'None'を扱う必要がなく、ブランクのフォームフィールドを' None'にする必要がないので、早い時期に導入されたコンベンションです。それはすぐに物事を完了するためのショートカットだったが、それは私たちにこの "練習"をもたらした怠惰や時間の不足のため、今、良い練習としてそれを正当化する必要があります。それで、私たちは今、このものを扱う2つのフィールド属性を持っています。 –

1

文字列もNULLである必要がありますが、アプリケーションによって異なります。MySQL, better to insert NULL or empty string?を参照してください。

空のフィールドにNULLを格納する場合は、問題のフィールドにnull=Trueを追加します。 https://docs.djangoproject.com/en/dev/ref/models/fields/#null

+2

これは間違っています... – zentenk

+0

これは間違っていますか? – six8

+2

値が設定されているかどうかを知ることを好みますが、空の文字列vs not(null)に設定した場合でもそうです。これはもちろん、あなたの好みやアプリケーションによって異なります。いずれにせよ、私はベストプラクティスについて意見を述べ、Djangoでそれを有効にする方法について説明しました。 – six8

0

これはfield.empty_strings_allowed属性に依存します。

一部のフィールドは、Falseに上書きされています。しかしCharFieldはそれをTrueのままにします。したがって、Field._get_defaultはデフォルトとして空の文字列を返します。blank=Trueでも。 Noneをデフォルトとして取得する唯一の方法は、フィールドにnull=Trueがあることです。

したがって、空ではないはずのフィールドがあり、空白が決してそこに置かれないようにしていないとします。 objects.createsaveメソッドにself.full_clean()(またはその他の検証)を入力する必要があります。

関連する問題