私は同様のスレッドをすべて見て、ドキュメントを読み、IntegerField
dbのように空の値を格納するために多くの組み合わせを試しましたが、毎回失敗しました。
MySQLを使用しています。
私models.py
はage=models.IntegerField()
フィールドを定義します。csvファイルからdbを入力しましたが、一部のセルに値がありません。Django docsは言う:
Field.null
If True, Django will store empty values as NULL in the database. Default is False.
Note that empty string values will always get stored as empty strings, not as NULL.
私が使用しIntegerField
ているので、空の文字列(csvからの空のセル)をNULL
dbのように格納したいと思います。したがって、私は(考えて)フィールドに追加するnull=True
必要がありage
ます。実際、私はこれ以上のことを試しました:
age=models.IntegerField()
age=models.IntegerField(null=True)
age=models.IntegerField(null=True, blank=True)
age=models.IntegerField(null=True, blank=True, default=None)
空の文字列をdbに挿入するたびに
ValueError: invalid literal for int() with base 10: ''
他に何ができると思いますか?
文字列は整数ではありません。空白文字列はNone
orではありません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
。null
純粋にデータベースblank
関連ですが、検証関連です。フィールドにがある場合blank=True
、フォームの検証では空の値を入力できます。フィールドにがある場合blank=False
、そのフィールドは必須です。
null
一方、データベースと関係があります:
Trueの場合、Djangoは空の値をNULLとしてデータベースに格納します。デフォルトはFalseです。
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に値を送信する前に検証を行います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加