2010-12-08 15 views

Respuesta

41

directo desde Django model field reference:

Field.null

Si True, Django almacenará valores vacíos como NULL en la base de datos. El valor predeterminado es False.

Tenga en cuenta que los valores de cadenas vacías siempre se almacenarán como cadenas vacías, no como NULL. Solo use null=True para campos que no sean cadenas como enteros, booleanos y fechas. Para ambos tipos de campos, también deberá establecer blank=True si desea permitir valores vacíos en formularios, ya que el parámetro null solo afecta el almacenamiento de la base de datos (consulte blank).

Evite utilizar null en campos basados ​​en cadenas como CharField y TextField a menos que tenga un motivo excelente. Si un campo basado en cadena tiene null=True, eso significa que tiene dos valores posibles para "sin datos": NULL y la cadena vacía. En la mayoría de los casos, es redundante tener dos valores posibles para "sin datos"; la convención Django es usar la cadena vacía, no NULL.

Field.blank

Si True, el campo se deja en blanco. El valor predeterminado es False.

Tenga en cuenta que esto es diferente de null. null está puramente relacionado con la base de datos, mientras que blank está relacionado con la validación. Si un campo tiene blank=True, la validación en el sitio de administración de Django permitirá la entrada de un valor vacío. Si un campo tiene blank=False, se requerirá el campo.

Field.default

El valor predeterminado para el campo. Esto puede ser un valor o un objeto invocable. Si se llama, se llamará cada vez que se cree un nuevo objeto.

¿No entiende todo esto?

+18

Creo que esto puede no estar claro para todos: para que un IntegerField sea anulable en ambas formas y db es necesario tener tanto null = True como blank = True. Ver: https://code.djangoproject.com/wiki/NewbieMistakes#IntegerNULLS – fjsj

+0

Creo que debería ser abordado por la comunidad Django porque es muy confuso. "Solo use null = True para campos que no sean cadenas como enteros" Django podría manejarlo de la misma manera que maneja auto_now y auto_now_add. "Las opciones auto_now, auto_now_add y por defecto son mutuamente excluyentes. Solo una de estas opciones puede estar presente." – Gregory

+1

@Gregory: como se explicó, 'null' se trata del almacenamiento de la base de datos. Django está exponiendo un aspecto útil pero comparativamente peligroso de las bases de datos SQL. Realmente es algo que debe explicarse en la documentación en lugar de limitarse o aplicarse en el código; no hay ninguna limitación que pueda aplicarse sin romper funcionalidades útiles (aunque potencialmente rincón). –

11

De docs:

null Si es True, Django almacenará vacías como valores NULL en la base de datos. El valor predeterminado es False.

blank Si es verdadero, el campo está permitido en en blanco. El valor predeterminado es falso.

default El valor predeterminado para el campo .

Puede usar "default" para establecer el valor que se utilizará para el campo en cuestión si su código no lo establece explícitamente en un valor.

Uso "blank" para fines de validación de formularios - espacio en blanco = True permitirá el campo para ser ajustado a un valor vacío

Uso "null" si desea almacenar un valor vacío como "nulo" en el DB. Sin embargo, a menudo se prefiere establecer valores en blanco en una cadena vacía o en 0 según corresponda para un campo dado.

-5
Null = None 
Blank = "" 
Default = "" 

Es probablemente lo más sencillo posible.

En blanco implica que NO es NULO y en su lugar tiene algún valor que representa "en blanco" para ese tipo de datos, que en el caso de una cadena es probablemente una cadena vacía. Para los números que podría ser 0.

1

En términos de implementación:

El campo 'en blanco' corresponde a todas las formas. Especifica si este valor se requiere en el formulario y se realiza la validación de formulario correspondiente. 'Verdadero' permite valores vacíos.

El campo 'nulo' corresponde al nivel de DB. Se establecerá como NULL o NOT NULL en la base de datos.

Por lo tanto, si deja un campo vacío en la administración con blank = true, NULL se alimenta a la base de datos. Ahora esto podría generar un error si esa columna en particular en el DB se especifica como NOT NULL.

Cuestiones relacionadas