Table of Contents
Cuando empecé a aprender Django, recuerdo que me sentí abrumado por la gran cantidad de conceptos (modelos, vistas, plantillas). Era como intentar beber de una manguera contra incendios. Pero tan pronto como comprendí cómo funcionan los modelos, el resto del marco de trabajo comenzó a tomar forma. Los modelos son la base de cualquier proyecto de Django y, en este tutorial, quiero guiarte en el proceso de creación de los mismos, comenzando desde cero. Cubriremos todo, desde la configuración de tu entorno hasta la creación de un modelo Product
funcional. Al final, tendrás una comprensión sólida de cómo funcionan los modelos y cómo usarlos de manera efectiva.
No nos sumerjamos en el tema: lo haremos paso a paso, para que ningún detalle quede sin explicar.
Configuración de Django: desde cero
El primer paso en cualquier proyecto de Django es asegurarse de que el entorno esté configurado correctamente. Antes de pensar siquiera en los modelos, debemos preparar nuestro espacio de trabajo. En Ubuntu, esto comienza por asegurarse de tener instalado Python, junto con su administrador de paquetes, pip. Puede instalar ambos con un simple comando:
sudo apt update && sudo apt install python3 python3-pip
Una vez hecho esto, confirma la instalación ejecutando python3 --version y pip3 --version , que deberían mostrar las versiones instaladas de Python y pip. Estas herramientas son esenciales para todo lo que haremos, por lo que vale la pena volver a comprobar que funcionan.
Siempre que comienzo un nuevo proyecto de Django, siempre configuro primero un entorno virtual. Este es un entorno dedicado a las dependencias de tu proyecto, manteniéndolas aisladas de la instalación de Python de todo el sistema. Piensa en ello como una burbuja protectora para tu proyecto. Para crear una, necesitarás el módulo venv
, que se instala con Python de manera predeterminada. Navega hasta la carpeta de tu proyecto y crea un entorno virtual:
python3 -m venv env
Activarlo ejecutando:
source env/bin/activate
Notarás que el indicador de tu terminal cambia para incluir (env)
, lo que te permite saber que el entorno virtual está activo.
Con nuestro entorno configurado, estamos listos para instalar Django. Con pip, instálelo con:
pip install django
Puede comprobar la versión para asegurarse de que se haya instalado correctamente:
python -m django --version
Esto garantiza que todo esté actualizado y listo para funcionar. Ahora viene la parte emocionante: iniciar un nuevo proyecto de Django. Para este tutorial, crearemos un proyecto llamado inventory_system
. Ejecutar:
django-admin startproject inventory_system .
El punto al final es fundamental: le indica a Django que cree el proyecto en el directorio actual en lugar de en una carpeta anidada. Esto mantiene todo ordenado y manejable.
Si echas un vistazo, Django habrá creado varios archivos y carpetas para ti. Está el archivo manage.py
, que usarás para interactuar con el proyecto, y una subcarpeta con el nombre de tu proyecto que contiene archivos de configuración como settings.py
y urls.py
. En este punto, ya puedes ejecutar el servidor de desarrollo:
python manage.py runserver
Abre un navegador, ve a http://127.0.0.1:8000 y verás la página de bienvenida de Django. Siempre es un momento de satisfacción porque significa que todo está funcionando como se esperaba.
Creación de una aplicación Django para productos
Una aplicación de Django es una parte modular de tu proyecto, que normalmente representa una característica específica. En este tutorial, crearemos una aplicación para gestionar productos y reseñas. Para generar la estructura de la aplicación, ejecuta:
python manage.py startapp products
Una vez creada la aplicación, regístrela en su proyecto. Abra settings.py
y agregue 'products' ,
a la lista INSTALLED_APPS
:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'products', # New app ]
Este paso le indica a Django que incluya la aplicación en el proyecto. Una vez que tenemos nuestra aplicación lista, estamos listos para comenzar a crear modelos.
Presentación del modelo de producto
Los modelos en Django son clases de Python que dDefine la estructura de las tablas de tu base de datos. Cada atributo del modelo se convierte en una columna y Django se encarga de todo el trabajo pesado de convertir estas clases de Python en sentencias SQL reales. Para nuestro ejemplo, comenzaremos con un modelo Product
. Este modelo tendrá campos para atributos comunes como el nombre del producto, la descripción, el precio y el stock. Además, incluiremos un campo slug
para crear URL optimizadas para SEO, un BooleanField
para marcar si el producto está activo y marcas de tiempo para cuando se creó y actualizó el producto.
Aquí está el código para el modelo de producto:
from django.db import models from django.utils.text import slugify from django.urls import reverse class Product(models.Model): name = models.CharField(max_length=200) description = models.TextField() price = models.DecimalField(max_digits=10, decimal_places=2) stock = models.IntegerField() is_active = models.BooleanField(default=True) slug = models.SlugField(unique=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) release_date = models.DateField(null=True, blank=True) image = models.ImageField(upload_to='product_images/', null=True, blank=True) def __str__(self): return self.name def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) super().save(*args, **kwargs) def get_absolute_url(self): return reverse('product_detail', kwargs={'slug': self.slug})
Desglosándolo
El modelo Product
utiliza varios tipos de campos para representar diferentes atributos de un producto. Por ejemplo, el campo name
es un CharField
con una longitud máxima de 200 caracteres, mientras que el campo description
es un TextField
para texto más largo. El campo price
es un DecimalField
, que nos permite almacenar valores monetarios precisos especificando el número total de dígitos ( max_digits=10
) y el número de decimales ( decimal_places=2
). De manera similar, stock
es un IntegerField
para representar recuentos de inventario, y is_active
es un BooleanField
para indicar si el producto está actualmente disponible.
El campo slug
es particularmente interesante. Es un SlugField
, que se utiliza para almacenar texto compatible con URL, a menudo derivado del nombre del producto. Para garantizar que cada producto tenga un slug único, establecemos unique=True
. Al anular el método save
, utilizamos la función slugify
de Django para generar automáticamente un slug cuando el producto se guarda por primera vez.
Para realizar un seguimiento de las marcas de tiempo, hemos añadido los campos created_at
y updated_at
. El campo created_at
utiliza auto_now_add=True
para establecer la marca de tiempo cuando se crea el registro por primera vez, mientras que updated_at
utiliza auto_now=True
para actualizar la marca de tiempo cada vez que se modifica el registro. También hay un campo image
para almacenar imágenes de productos. Esto requiere la biblioteca Pillow, que puedes instalar con pip install pillow .
Dos métodos adicionales mejoran la usabilidad de este modelo. El método __str__
define cómo aparecerá el producto en el administrador de Django o cuando se imprima. En este caso, simplemente devuelve el nombre del producto. El método get_absolute_url
genera una URL para el producto, utilizando su slug. Esto mantiene la lógica de la URL centralizada y evita codificar rutas en otras partes del código.
Realizando migraciones
Para aplicar este modelo a la base de datos, necesitamos crear y ejecutar migraciones. Así es como Django traduce nuestro código Python en cambios en el esquema de la base de datos. Primero, crea las migraciones con:
python manage.py makemigrations
Luego, aplíquelos a la base de datos con:
python manage.py migrate
Si todo funcionó, Django habrá creado una tabla products_product
en tu base de datos. ¡Tu modelo Product
ya está activo y listo para usar!
Concluyendo la parte 1
Hasta ahora, nosotrosHemos configurado Django, hemos creado un proyecto y una aplicación, y hemos creado un modelo Product
funcional. En la siguiente parte, crearemos un modelo Review
, estableceremos relaciones entre los modelos y profundizaremos en la consulta de la base de datos con el ORM de Django. Si nos has estado siguiendo, tómate un tiempo para explorar tu nuevo modelo: ejecuta el servidor de desarrollo, experimenta con el administrador de Django y míralo en acción. ¡No te pierdas la segunda parte!