文字列は整数ではありません。空白の文字列はNoneではありません またはNULL 。あなたがする必要があるのは、フィールドが空白であるインスタンスをキャッチし、それをNoneにキャストすることです 。
foo = "something" # "something" is coming from your CSV file
try:
val = int(foo)
except ValueError:
# foo is something that cannot be converted to
# a number. It could be an empty string, or a
# string like 'hello'
# provide a default value
val = None
# Now use val to insert into the database
f = MyModel()
f.age = val
f.save()
blank
厳密にはフロントエンド検証用です。データベース側には影響しません:
null
一方、データベースと関係があります:
IntegerField 整数に変換できる値が必要なため、空白の文字列を渡すと 、キャストできず、例外が発生します。代わりに、Noneを渡した場合 、age = models.IntegerField(null=True)があります 、それはそれを正しく保存することを知っています。
要約すると:
-
age = models.IntegerField()フィールドは必須であり、有効な整数値が必要です。
です。Noneは受け入れられません データベースにnull値はありません。有効な値は-2147483648〜2147483647 -
age = models.IntegerField(null=True)フィールドは必須です(フォーム検証)。フィールドに
Noneがある場合 値として、NULLに変換されます データベース内。 -
age = models.IntegerField(blank=True, null=True)フィールドは必須ではありません(フォーム検証)。フィールドが
Noneで渡された場合 、NULLに変換されます -
age = models.IntegerField(blank=True)フィールドは必須ではありませんが(フォーム検証)、データベースはnullを受け入れないため、有効な整数値を渡す必要があります。通常、ここでは
default=0のデフォルト値を指定します または、値をormに送信する前に検証を行ってください。