同様のスレッドをすべて確認し、ドキュメントを読み、IntegerField
データベースに空の値を保存するためにさまざまな組み合わせを試しましたが、毎回失敗しました。
私はMySQLを使用しています。
フィールドをmodels.py
定義しますage=models.IntegerField()
。csv ファイルからデータベースにデータを入力すると、一部のセルに値がありません。Django のドキュメントには次のように書かれています:
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 の空のセル) を db 内に格納することです。したがって、フィールドにNULL
追加する必要があると思います。実際、私はこれ以外にもいろいろ試しました: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: ''
他に何ができると思いますか?
ベストアンサー1
文字列は整数ではありません。また、空白の文字列は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
。null
は純粋にデータベース関連ですが、blank
は検証関連です。 フィールドに がある場合blank=True
、フォーム検証では空の値の入力が許可されます。 フィールドに がある場合blank=False
、フィールドは必須になります。
null
一方、データベースに関係します:
True の場合、Django は空の値を NULL としてデータベースに保存します。デフォルトは False です。
IntegerField
は整数に変換できる値を必要とするので、空白文字列の場合、キャストできず、例外が発生します。代わりに、 を渡しNone
、 がある場合はage = models.IntegerField(null=True)
、それを正しく格納することが認識されます。
要約する:
age = models.IntegerField()
None
フィールドは必須であり、有効な整数値が必要です。データベースでは null 値は受け入れられず、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 に送信する前に何らかの検証を実行します。