Низът не е цяло число; и празен низ не е 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
от друга страна, има общо с базата данни:
IntegerField
изисква стойност, която може да се преобразува в цяло число, така че когато подадете празен низ , не може да го хвърли и повдига изключение. Вместо това, ако подадете None
и имате age = models.IntegerField(null=True)
, то знае да го съхранява правилно.
За да обобщим:
-
age = models.IntegerField()
Полето е задължително и се нуждае от валидна целочислена стойност. Няма да приеме
None
и няма да има нулеви стойности в базата данни. Валидни стойности са -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
или направете проверка, преди да изпратите стойността на организацията.