Una cadena no es un número entero; y una cadena en blanco no es None
o NULL
. Lo que debe hacer es capturar aquellas instancias en las que el campo está en blanco y luego convertirlo en 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
es estrictamente para la validación de front-end; no tiene ningún impacto en el lado de la base de datos:
null
por otro lado, tiene que ver con la base de datos:
Un IntegerField
requiere un valor que se puede convertir en un número entero, por lo que cuando pasa una cadena en blanco , no puede emitirlo y genera una excepción. En cambio, si pasa None
, y tiene age = models.IntegerField(null=True)
, sabe almacenarlo correctamente.
Para resumir:
-
age = models.IntegerField()
El campo es obligatorio y necesita un valor entero válido. No aceptará
None
y no tendrá valores nulos en la base de datos. Los valores válidos son -2147483648 a 2147483647 -
age = models.IntegerField(null=True)
El campo es obligatorio (validación de formulario). Si el campo tiene
None
como valor, se traducirá aNULL
en la base de datos. -
age = models.IntegerField(blank=True, null=True)
El campo no es obligatorio (validación de formulario). Si el campo se pasa en
None
, se traducirá aNULL
-
age = models.IntegerField(blank=True)
El campo no es obligatorio (validación de formulario), pero se debe pasar un valor entero válido porque la base de datos no acepta valores nulos. Por lo general, aquí le daría un valor predeterminado con
default=0
o haga alguna validación antes de enviar el valor al orm.