- ¿Qué es Django Admin?
- Crear un superusuario
- ¿Cómo mostrar nuestros modelos en el panel de administración?
- Que sea más útil: búsquedas y filtros
Ya vamos por buena parte del curso, y ahora que sabes cómo crear modelos y trabajar con datos, es momento de ver una de las herramientas más útiles que nos ofrece Django para los desarrolladores: el panel de administración o Django Admin.
Vamos a explicarlo de forma sencilla, como si estuvieras hablando con un amigo que quiere que le muestres cómo manejar su propia base de datos sin escribir líneas infinitas de código para cada acción.
¿Qué es Django Admin?
Esta funcionalidad es solo para usuarios con permisos especiales: editores, moderadores o administradores (como tú, desarrollador). Los visitantes del sitio no pueden acceder a esta consola.
Sí. Cuando creas un proyecto Django nuevo, el admin viene listo para usarse. Si revisas tu archivo principal urls.py, esto ya está configurado:
from django.contrib import admin
from django.urls import path
urlpatterns = [
# otras rutas...
path('admin/', admin.site.urls),
]
Eso significa que, al abrir http://localhost:8000/admin en el navegador, verás la pantalla de acceso al panel de administración:
Crear un superusuario
Para ingresar al panel admin, necesitas una cuenta de usuario que tenga permisos especiales. Lo más común es crear un "superusuario": un usuario con control total del sitio.
Desde la terminal, en la raíz de tu proyecto, escribe:
python manage.py createsuperuser
Sigue las instrucciones y completa los campos:
Username: admin
Email address: admin@example.com
Password: ********
Password (again): ********
Superuser created successfully.
¡Listo! Ahora puedes ingresar al panel con ese usuario:
Verás algunos elementos por defecto como "Usuarios" y "Grupos". Esto lo provee el sistema de autenticación de Django.
¿Cómo mostrar nuestros modelos en el panel de administración?
Por defecto, solo aparecen los modelos del sistema. Para mostrar tus propios modelos (como un modelo Article), tienes que registrarlos.
Supongamos que ya tienes una aplicación con un modelo Article. Abre el archivo admin.py que está dentro de esa app (no en el proyecto principal) y registra la clase así:
from django.contrib import admin
from .models import Article
admin.site.register(Article)
Cuando actualices la página del admin, verás que ahora hay una nueva sección con tus artículos:
Ahora puedes crear, modificar o eliminar artículos desde esta interfaz visual.
Pero el listado puede verse feo al comienzo. ¿Por qué?
Esto es porque Django muestra el valor por defecto de los objetos: el nombre de la clase y el id.
Para que sea más claro, podemos decirle a Django qué texto mostrar sobre cada objeto. Esto se hace sobrescribiendo el método str() en el modelo:
class Article(models.Model):
name = models.CharField(max_length=200)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name # Mostramos el nombre del artículo
Ahora el listado se verá más humanamente legible:
Que sea más útil: búsquedas y filtros
El Django Admin se puede personalizar más. Por ejemplo:
- Buscar por palabras clave en artículos
- Mostrar más columnas en la lista de objetos
- Agregar filtros por fecha
Agregar un buscador
Podemos definir una interfaz para que el administrador busque artículos por nombre o contenido.
Edita admin.py así:
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
search_fields = ['name', 'body'] # Los campos por los que se puede buscar
admin.site.register(Article, ArticleAdmin)
Y así se verá el buscador:
Usar decoradores para simplificar
También puedes registrar el modelo usando un decorador, lo que hace el código más limpio:
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
search_fields = ['name', 'body']
Mostrar más columnas y filtrar por fechas
Supongamos que queremos que el listado muestre, además del nombre del artículo, la fecha de publicación. También queremos poder filtrar los artículos por esa fecha. Para lograrlo, hacemos lo siguiente:
from django.contrib import admin
from django.contrib.admin import DateFieldListFilter
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('name', 'created_at') # Campos visibles en la lista
search_fields = ['name', 'body']
list_filter = (('created_at', DateFieldListFilter),) # Filtro por fecha
Y ahora el panel se verá así:
De esta forma, los administradores pueden navegar y gestionar artículos fácilmente.
Resumen
- Django Admin es una herramienta que permite gestionar los datos del sitio rápidamente.
- Para acceder necesitas un superusuario: créalo con
python manage.py createsuperuser. - Las rutas para el admin ya vienen configuradas por defecto (
/admin). - Para mostrar tus modelos en el admin, regístralos en el archivo
admin.pyusandoadmin.site.register()o@admin.register(). - Usa el método
__str__()para mostrar tus objetos con nombres legibles. - Puedes personalizar la lista de objetos:
list_display: define qué campos mostrar en la tablasearch_fields: permite buscar en los campos que indiqueslist_filter: añade filtros por campo, por ejemplo fechas
Trabajo independiente
Práctica con el panel de administrador
En esta actividad pondrás en práctica la teoría para manejar datos desde el administrador de Django. Sigue estos pasos:
- Realiza todos los pasos de la teoría.
- Intenta agregar, modificar y eliminar datos desde la sección de administrador.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.