En streng er ikke et heltal; og en tom streng er ikke None
eller NULL
. Det, du skal gøre, er at fange de tilfælde, hvor feltet er tomt, og derefter caste det til 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
er udelukkende til frontend-validering; det har ingen indflydelse på databasesiden:
null
på den anden side har det at gøre med databasen:
Et IntegerField
kræver værdi, der kan konverteres til et heltal, så når du sender en tom streng , den kan ikke kaste den og rejser en undtagelse. Hvis du i stedet indtaster None
, og du har age = models.IntegerField(null=True)
, den ved at opbevare den korrekt.
For at opsummere:
-
age = models.IntegerField()
Feltet er påkrævet og kræver en gyldig heltalsværdi. Den accepterer ikke
None
og har ingen null-værdier i databasen. Gyldige værdier er -2147483648 til 2147483647 -
age = models.IntegerField(null=True)
Feltet er påkrævet (formularvalidering). Hvis feltet har
None
som en værdi vil den blive oversat tilNULL
i databasen. -
age = models.IntegerField(blank=True, null=True)
Feltet er ikke påkrævet (formularvalidering). Hvis feltet sendes i
None
, vil det blive oversat tilNULL
-
age = models.IntegerField(blank=True)
Feltet er ikke påkrævet (formularvalidering), men en gyldig heltalsværdi skal indsendes, fordi databasen ikke accepterer null. Typisk vil du her give den en standardværdi med
default=0
eller få foretaget en validering, før du sender værdien til orm.