Ein String ist keine Ganzzahl; und ein leerer String ist nicht None
oder NULL
. Sie müssen nur die Fälle abfangen, in denen das Feld leer ist, und es dann in None
umwandeln .
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
dient ausschließlich der Front-End-Validierung; es hat keine Auswirkung auf die Datenbankseite:
null
hat andererseits mit der Datenbank zu tun:
Ein IntegerField
erfordert einen Wert, der in eine Ganzzahl konvertiert werden kann, also wenn Sie eine leere Zeichenfolge übergeben , kann es nicht umgewandelt werden und löst eine Ausnahme aus. Stattdessen, wenn Sie None
übergeben , und Sie haben age = models.IntegerField(null=True)
, weiß es, es richtig zu speichern.
Zusammenfassend:
-
age = models.IntegerField()
Das Feld ist erforderlich und benötigt einen gültigen ganzzahligen Wert.
None
wird nicht akzeptiert und hat keine Nullwerte in der Datenbank. Gültige Werte sind -2147483648 bis 2147483647 -
age = models.IntegerField(null=True)
Feld ist erforderlich (Formularvalidierung). Wenn das Feld
None
hat als Wert wird er inNULL
übersetzt in der Datenbank. -
age = models.IntegerField(blank=True, null=True)
Feld ist nicht erforderlich (Formularvalidierung). Wenn das Feld in
None
übergeben wird , wird es inNULL
übersetzt -
age = models.IntegerField(blank=True)
Das Feld ist nicht erforderlich (Formularvalidierung), aber es muss ein gültiger ganzzahliger Wert übergeben werden, da die Datenbank keine Null akzeptiert. Normalerweise würden Sie ihm hier einen Standardwert mit
default=0
geben oder lassen Sie eine Validierung durchführen, bevor Sie den Wert an das Orm senden.