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.
Nonewird 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
Nonehat 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=0geben oder lassen Sie eine Validierung durchführen, bevor Sie den Wert an das Orm senden.