Een string is geen geheel getal; en een lege string is niet None
of NULL
. Wat u moet doen, is die gevallen opvangen waarin het veld leeg is en het vervolgens casten naar 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
is strikt voor front-end validatie; het heeft geen invloed op de databasekant:
null
heeft daarentegen te maken met de database:
Een IntegerField
vereist een waarde die kan worden omgezet in een geheel getal, dus wanneer u een lege tekenreeks doorgeeft, , het kan het niet casten en roept een uitzondering op. Als u in plaats daarvan None
. invult , en je hebt age = models.IntegerField(null=True)
, het weet het correct op te slaan.
Samenvattend:
-
age = models.IntegerField()
Veld is verplicht en heeft een geldige integerwaarde nodig. Het accepteert geen
None
en hebben geen null-waarden in de database. Geldige waarden zijn -2147483648 tot 2147483647 -
age = models.IntegerField(null=True)
Veld is verplicht (formuliervalidatie). Als het veld
None
. heeft als een waarde wordt deze vertaald naarNULL
in de database. -
age = models.IntegerField(blank=True, null=True)
Veld is niet verplicht (formuliervalidatie). Als het veld wordt doorgegeven in
None
, het wordt vertaald naarNULL
-
age = models.IntegerField(blank=True)
Veld is niet vereist (formuliervalidatie), maar er moet een geldige integerwaarde worden ingevoerd omdat de database geen null accepteert. Normaal gesproken zou je het hier een standaardwaarde geven met
default=0
of laat een validatie uitvoeren voordat u de waarde naar de orm verzendt.