Uma string não é um inteiro; e uma string em branco não é
None
ou NULL
. O que você precisa fazer é capturar as instâncias em que o campo está em branco e convertê-lo em 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
é estritamente para validação de front-end; não tem nenhum impacto no lado do banco de dados:null
por outro lado, tem a ver com o banco de dados:Um
IntegerField
requer um valor que pode ser convertido em um inteiro, então quando você passa uma string em branco , ele não pode convertê-lo e gera uma exceção. Em vez disso, se você passar None
, e você tem age = models.IntegerField(null=True)
, ele sabe armazená-lo corretamente. Para resumir:
-
age = models.IntegerField()
O campo é obrigatório e precisa de um valor inteiro válido. Ele não aceitaráNone
e não terá valores nulos no banco de dados. Os valores válidos são -2147483648 a 2147483647
-
age = models.IntegerField(null=True)
O campo é obrigatório (validação do formulário). Se o campo tiverNone
como um valor, ele será traduzido paraNULL
no banco de dados.
-
age = models.IntegerField(blank=True, null=True)
Campo não obrigatório (validação do formulário). Se o campo for passado emNone
, ele será traduzido paraNULL
-
age = models.IntegerField(blank=True)
O campo não é obrigatório (validação de formulário), mas um valor inteiro válido precisa ser passado porque o banco de dados não aceita nulo. Normalmente aqui você daria um valor padrão comdefault=0
ou ter alguma validação antes de enviar o valor para o formulário.