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áNonee 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 tiverNonecomo um valor, ele será traduzido paraNULLno 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=0ou ter alguma validação antes de enviar o valor para o formulário.