Contenido del curso

Desarrollo de Aplicaciones en Django

Cómo usar Django Admin para gestionar modelos

Resumen

Django incluye un panel administrativo web que permite crear, editar y eliminar registros sin escribir vistas adicionales. Django Admin es una de las funcionalidades más potentes del framework, ideal para personas que están aprendiendo desarrollo backend con Python y quieren administrar modelos desde una interfaz lista para usar.

Qué es Django Admin y cómo se accede

Al crear un proyecto, Django configura automáticamente la ruta admin/ en el archivo de URLs. Cuando ejecutas el servidor con runserver y entras a esa ruta, aparece una pantalla de login titulada Django Administration [0:30]. Ese login no funciona hasta que existe al menos un superusuario en la base de datos.

¿Qué es un superusuario en Django? Es una cuenta con permisos completos para acceder al panel admin, gestionar usuarios y modificar cualquier modelo registrado.

Cómo crear un superusuario desde la consola

Para generar la cuenta administradora, detén el servidor y ejecuta el comando createsuperuser [1:05]. La consola pedirá tres datos en orden:

  • Nombre de usuario, por ejemplo Luis.
  • Correo electrónico, como admin@admin.com.
  • Contraseña con su confirmación.

Después vuelves a levantar el servidor, ingresas las credenciales y entras al panel. Dentro verás dos secciones predeterminadas, Users y Groups, que pertenecen al sistema de autenticación que Django trae integrado. Tu usuario aparecerá marcado con staff status.

Cómo registrar un modelo en el admin de Django

El archivo donde se registran los modelos es admin.py, ubicado dentro de la aplicación. Por defecto está vacío y allí debes definir una clase que herede de ModelAdmin, la clase base que conecta un modelo con el panel.

El flujo mínimo para registrar el modelo Product se compone de tres pasos:

  1. Importar el modelo con from .models import Product.
  2. Crear la clase ProductAdmin(admin.ModelAdmin).
  3. Llamar a admin.site.register(Product, ProductAdmin) pasando el modelo y la clase de registro.

Un detalle frecuente es que la lista no muestre el nombre del producto. Eso suele ocurrir por un error en el método __str__ del modelo, donde a veces se escribe srt en lugar de str [3:45]. Una vez corregido, cada producto se muestra con su nombre real.

Cómo personalizar columnas y agregar buscador

Django Admin permite mejorar la tabla con dos atributos clave dentro de la clase ProductAdmin:

  • list_display: recibe una lista con los nombres de los atributos del modelo que quieres ver como columnas, por ejemplo name y price.
  • search_fields: agrega una barra de búsqueda en la parte superior y acepta los mismos campos del modelo.

¿Para qué sirve list_display en Django Admin? Define qué columnas aparecen en la tabla del listado, lo que evita tener que abrir cada registro para ver su información clave.

Con el buscador activo puedes filtrar productos escribiendo parte del nombre. Al hacer clic sobre un registro se abre un formulario con tres botones de guardado: guardar y permanecer, guardar y crear otro, o guardar y volver al listado.

Cómo subir imágenes y servir archivos media en Django

Desde el formulario de edición puedes adjuntar una foto al producto usando el campo de tipo imagen. Al guardar, Django almacena el archivo en una carpeta nueva (por ejemplo logos) y muestra la URL del recurso. También aparece un botón de History que registra quién hizo cada cambio y cuándo, útil para auditoría.

El problema clásico aparece después: la imagen se sube pero no se renderiza en el listado. Esto ocurre porque el servidor de desarrollo no sabe desde qué carpeta servir los archivos media.

Cómo configurar las URLs estáticas para mostrar imágenes

La solución vive en el archivo urls.py del proyecto. Necesitas dos importaciones:

  • from django.conf import settings para acceder a MEDIA_URL y MEDIA_ROOT.
  • from django.conf.urls.static import static para generar las rutas que sirven los archivos.

Luego sumas a la lista de urlpatterns la llamada static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT). Al recargar la página, el navegador ya puede acceder a la carpeta de medios y las imágenes aparecen correctamente.

¿Cuál es la diferencia entre MEDIA_URL y MEDIA_ROOT? MEDIA_URL es la ruta pública que usa el navegador, mientras que MEDIA_ROOT es la ruta física en el servidor donde se guardan los archivos subidos.

Acciones masivas y reto práctico

En el listado verás checkboxes a la izquierda de cada fila. Permiten seleccionar varios registros a la vez y aplicar acciones en lote, como eliminación masiva. Django también deja crear acciones personalizadas para automatizar tareas frecuentes.

Como práctica, agrega un nuevo campo al modelo Product con la fecha de creación y muéstralo en list_display para que aparezca como columna en la tabla. ¿Cómo lo resolverías tú? Comparte tu enfoque en los comentarios.