Ответ 1
Строка не является целым числом; и пустая строка не 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
.NULL
чисто связанный с базой данных, тогда какblank
связан с валидацией. Если поле имеетblank=True
, проверка формы позволит ввести пустое значение. Если поле имеетblank=False
, это поле будет необходимо.
NULL
, с другой стороны, связано с базой данных:
Если True, Django будет хранить пустые значения как NULL в базе данных. По умолчанию False.
An 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
или выполняете некоторую проверку перед отправкой значения в orm.