Ya sabemos que nuestra información (como la de los proveedores) se guardará en una base de datos, y que Django nos ayudará a interactuar con ella mediante su ORM. Ahora, cuando le decimos a Django "quiero guardar el nombre de un proveedor", no basta con decirle "guardá esto". Necesitamos ser más específicos: ¿ese nombre es un texto corto? ¿Un número? ¿Una fecha? ¿Un email?
Esta especificación es crucial. Imagina que le dices a la base de datos: "Voy a guardar zapatos en este cajón", pero luego intentas meter una remera. ¡No va a funcionar bien! La base de datos necesita saber qué tipo de cosa va a guardar en cada "espacio" o "columna" de nuestras tablas. A esto le llamamos definir el tipo de dato de cada campo.
Cada campo en nuestra base de datos debe tener una "etiqueta" que indique qué tipo de información contiene.
Cuando definamos nuestras tablas en Django (a las que llamaremos "modelos" o models
), le diremos a cada columna (que llamaremos "campo" o field
) qué tipo de dato puede almacenar. Django nos ofrece una variedad de tipos de campos ya listos para usar. Estos son algunos de los más comunes que probablemente usaremos:
Tipo de Dato en Django | Qué Guarda | Ejemplo de Uso | Argumento Obligatorio Principal |
---|---|---|---|
CharField |
Texto corto | Nombre, apellido, título, dirección corta | max_length (longitud máxima del texto, ej: max_length=100 ) |
TextField |
Texto largo | Descripciones detalladas, comentarios, artículos de blog | Ninguno (aunque se pueden poner límites) |
IntegerField |
Números enteros | Edad, cantidad de productos, ID de usuario | Ninguno |
DecimalField |
Números decimales precisos | Precios, montos monetarios | max_digits (total de dígitos), decimal_places (dígitos después de la coma) |
FloatField |
Números decimales (menos precisos que DecimalField, pero a veces útiles) | Mediciones científicas, coordenadas geográficas | Ninguno |
EmailField |
Direcciones de correo electrónico | Email del cliente, email del proveedor | Opcional: max_length . Automáticamente valida que tenga un formato de email (con "@" y ".") |
DateField |
Fechas (día, mes, año) | Fecha de nacimiento, fecha de una factura | Ninguno |
DateTimeField |
Fechas y horas | Momento exacto de una publicación, fecha y hora de un evento | Ninguno |
BooleanField |
Verdadero o Falso (Sí o No) | ¿Está activo?, ¿Es cliente VIP?, ¿Tiene descuento? | Ninguno (por defecto es False ) |
¡Estos son solo algunos! Django tiene muchos más tipos de campos para cubrir casi cualquier necesidad (campos para URLs, para archivos, para relaciones entre tablas, etc.). Siempre puedes consultar la documentación oficial de Django para ver la lista completa y sus detalles.
Cuando definimos un campo, además de su tipo, podemos pasarle "argumentos" para darle más especificaciones. Ya vimos uno obligatorio: max_length
para CharField
, que le dice a Django cuál es la cantidad máxima de caracteres que puede tener ese texto.
Pero hay otros argumentos opcionales muy útiles que controlan cómo se comporta el campo, especialmente en relación con si puede estar vacío o no:
blank=True
/ blank=False
:
blank=True
: Significa que este campo puede dejarse en blanco en los formularios (como en el panel de administración de Django). Es decir, el usuario no está obligado a llenarlo.blank=False
(es el valor por defecto si no lo pones): Significa que el campo es requerido en los formularios. Django mostrará un error si intentas guardar sin llenarlo.null=True
/ null=False
:
null=True
: Le dice a la base de datos que este campo puede almacenar un valor "nulo" (NULL
en lenguaje de base de datos), que básicamente significa "sin valor" o "desconocido".null=False
(es el valor por defecto): Significa que la base de datos siempre espera un valor para este campo; no puede estar vacío a nivel de base de datos.¿Cuál es la diferencia entre blank
y null
? Es sutil pero importante:
blank
se refiere a la validación de formularios (lo que ve el usuario).null
se refiere a cómo se guarda el dato en la base de datos.Para campos de texto (como CharField
o TextField
), generalmente es mejor usar blank=True
y dejar null=False
(el valor por defecto). Django prefiere guardar una cadena de texto vacía (""
) en lugar de un NULL
en la base de datos para los campos de texto. Para otros tipos de campos (números, fechas, booleanos), si quieres que sean opcionales, a menudo usarás null=True
y blank=True
juntos.
Cuando creemos nuestro modelo para "Proveedor", vamos a poner en práctica esto. Por ejemplo, el nombre del proveedor probablemente será requerido (blank=False, null=False
), pero quizás su segundo email sea opcional (blank=True, null=True
si es un EmailField
, o blank=True
si es un CharField
para permitir un texto vacío).
El video de este capítulo te explica con más ejemplos estos tipos de datos y sus argumentos.
Al definir la estructura de nuestros datos en Django (lo que llamamos "modelos"), es fundamental especificar el tipo de dato para cada campo (columna). Django ofrece varios tipos como CharField
(texto), IntegerField
(números enteros), EmailField
(correos), y DateField
(fechas). Además, podemos usar argumentos como max_length
(para limitar la longitud del texto), blank=True
(para permitir que un campo esté vacío en formularios) y null=True
(para permitir que la base de datos guarde un valor nulo para ese campo). Elegir los tipos y argumentos correctos asegura que nuestra información se guarde y valide adecuadamente.
¡Ya estamos listos para el siguiente paso! Con este conocimiento sobre cómo Django maneja los tipos de datos, en el próximo capítulo vamos a crear nuestra primera "aplicación" dentro del proyecto Django y empezaremos a definir nuestro modelo de Proveedores. ¡Se pone bueno!