文字列は整数ではありません。空白の文字列は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に送信する前に検証を行ってください。