Episodio 2, Capítulo 14

Tipos de Datos en Django Models

⏱️ Tiempo de lectura: 10 minutos
🧩 Actividades: 0 (Conceptual)
📚 Nivel: Principiante

🏷️ Poniendo las Etiquetas Correctas: Tipos de Datos

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.

Etiquetas de diferentes tipos en cajas

Cada campo en nuestra base de datos debe tener una "etiqueta" que indique qué tipo de información contiene.

Tipos de Campos Comunes en los "Models" de Django

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.

Argumentos de los Campos: Dando Detalles Extra

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.

Pequeño Resumen del Capítulo 14 (Episodio 2)

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!