Django incluye una herramienta poderosa que permite administrar los datos de tu aplicación directamente desde el navegador. Se trata del django-admin, un panel de administración web listo para usar con mínima configuración. Aquí se explica paso a paso cómo activarlo, registrar modelos, personalizar vistas y resolver la carga de imágenes.
¿Cómo acceder al panel de administración de Django?
En clases anteriores se vio que Django genera automáticamente un path llamado admin/ dentro del archivo de URLs [0:22]. Al correr el servidor con runserver y visitar esa ruta en el navegador, aparece un formulario de login con el título "Django administration".
Para ingresar, es necesario crear un superusuario. Django ofrece el comando createsuperuser [0:47], que solicita un nombre de usuario, correo electrónico y contraseña. Una vez creado, se vuelve a iniciar el servidor y se ingresan las credenciales en el formulario.
Al acceder, el panel muestra por defecto dos secciones: users y groups. Esto se debe a que Django viene con un sistema de autenticación incluido [1:18]. Dentro de users se puede ver el usuario recién creado con su staff status activo.
¿Cómo registrar un modelo en el django-admin?
Para que un modelo como Product aparezca en el administrador, se trabaja en el archivo admin.py dentro de la aplicación [1:37]. El proceso requiere tres pasos:
- Importar el modelo:
from .models import Product.
- Crear una clase que herede de
admin.ModelAdmin.
- Registrar el modelo con
admin.site.register(Product, ProductAdmin) [2:04].
El ModelAdmin es la clase base que permite personalizar cómo se muestra y se comporta cada modelo dentro del panel. Una vez registrado, al recargar la página aparece la sección de productos.
¿Por qué no se muestra el nombre del producto en la lista?
Al listar los objetos, Django usa el método __str__ del modelo para representarlos como texto. Si el nombre no aparece, puede deberse a un error tipográfico, como escribir __srt__ en lugar de __str__ [2:31]. Corregir ese detalle y recargar soluciona el problema de inmediato.
¿Cómo personalizar la tabla de productos?
Django permite agregar columnas a la tabla del listado mediante el atributo list_display dentro de la clase ProductAdmin [2:47]. Se le pasa una lista con los nombres de los campos del modelo:
python
class ProductAdmin(admin.ModelAdmin):
list_display = ['name', 'price']
search_fields = ['name']
El atributo search_fields agrega un buscador en la parte superior de la lista [3:07]. Al escribir un término, filtra los resultados que coincidan con el campo indicado.
¿Cómo editar, crear y eliminar objetos desde el admin?
Al hacer clic sobre un producto, se abre un formulario de edición que permite modificar nombre, descripción, precio e imagen [3:23]. Django ofrece tres opciones al guardar:
- Guardar y quedarse en el mismo formulario.
- Guardar y agregar otro producto nuevo.
- Guardar y volver a la lista.
El panel también incluye un historial de cambios [4:18] donde se registra quién hizo cada modificación y qué campos se alteraron. Para eliminar, se seleccionan productos mediante checkboxes y se ejecuta la acción de borrado desde el menú desplegable [4:33].
¿Cómo configurar Django para servir archivos de imagen?
Al subir imágenes desde el admin, Django las almacena en una carpeta local (por ejemplo logos/), pero no las sirve automáticamente [4:55]. Para que el navegador pueda cargarlas, es necesario configurar las URLs de archivos multimedia.
En el archivo urls.py se importan dos elementos clave:
python
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# tus rutas existentes
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
El método static recibe MEDIA_URL como la ruta pública y MEDIA_ROOT como la ubicación física de los archivos [5:19]. Con esta configuración, las imágenes cargan correctamente al recargar la página de productos.
El django-admin es una de las funcionalidades más valiosas del framework porque permite a los usuarios gestionar datos sin escribir interfaces adicionales. Un buen ejercicio para practicar es agregar un campo de fecha de creación al modelo Product y mostrarlo en el list_display de la tabla. ¿Ya lo intentaste? Comparte cómo te fue.