¿Qué es Django Admin y para qué sirve?

Video thumbnail

Ya conocemos como trabajar con las migraciones en Django, el siguiente paso es como crear los famosos CRUD, que en Django, lo tenemos muy fácil. Django Admin es una aplicación que viene instalado por defecto cuando creamos un proyecto en Django, para poder emplear el mismo, necesitamos de otras aplicaciones que ya vienen con nuestro framework; como:

'account', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles',

Todas estas aplicaciones las podemos ver y administrar en el archivo global de configuraciones del proyecto. Por ejemplo; para lograr la autenticación en nuestra aplicación de Django Admin empleamos la app llamada django.contrib.auth, y esto es una parte de emplear frameworks como Django, y es que podemos reutilizar componentes, módulos, aplicaciones... fácilmente e incluso el mismo framework hace lo mismo.

Estas aplicaciones son las responsables del sistema de autenticación, permisos y visualización que hacen posible el panel de Django Admin.

¿Qué es Django Admin y para qué sirve?

Cuando empecé a trabajar con Django, una de las cosas que más me ENAMORÓ fue descubrir que el framework ya traía una herramienta completa para administrar los datos de mi aplicación: Django Admin.

Este panel de control integrado te permite crear, leer, actualizar y eliminar registros (CRUD) sin escribir una sola línea de código HTML o JavaScript. En otras palabras, te da una interfaz administrativa lista para usar desde el momento en que inicias un proyecto.

1. Introducción: el panel de administración integrado de Django

Django Admin es una aplicación que viene instalada por defecto en cualquier proyecto creado con el comando:

$ django-admin startproject

Su objetivo es claro: ofrecer una interfaz de gestión para los modelos de tu aplicación. Gracias a este panel, puedes crear usuarios, agregar productos, revisar comentarios o administrar categorías sin construir un panel desde cero.

En mi experiencia, esta funcionalidad ha sido ideal cuando desarrollo prototipos o aplicaciones internas. No tengo que perder tiempo creando interfaces de gestión, y puedo concentrarme en la lógica del negocio.

2. Cómo acceder al panel de Django Admin

Crear un superusuario

Antes de poder entrar al panel, necesitas crear una cuenta de superusuario. En mi caso, lo hago siempre después de migrar la base de datos:

$ python manage.py createsuperuser

El comando te pedirá nombre de usuario, correo y contraseña. Una vez creado, tendrás acceso total al panel.

Iniciar sesión en /admin

Por defecto, Django usa la URL /admin como punto de acceso al panel.

Solo debes ejecutar el servidor con:

$ python manage.py runserver

y abrir en el navegador:

http://127.0.0.1:8000/admin

Si usas otra URL o puerto, recuerda modificarlo.

Personalmente, siempre verifico que el usuario y las rutas estén activos antes de registrar modelos.

Configuración básica del archivo urls.py

En tu archivo principal urls.py, asegúrate de tener la siguiente línea:

from django.contrib import admin
from django.urls import path
urlpatterns = [
   path('admin/', admin.site.urls),
]

Esto conecta la ruta /admin con la aplicación de administración integrada.

Cuando creamos nuevas páginas web o API, debemos agregar estas URL a urls.py para el enrutamiento.

Eche un vistazo al archivo urls.py a nivel de proyecto.

Django Urls.py
Django Urls.py


Como puede ver en la imagen de arriba, he marcado la línea 20 con un rectángulo rojo. Aquí, el primer parámetro dice cuál es nuestra URL y el segundo parámetro dice que esta URL será el panel de administración de nuestro proyecto.

Después de ejecutar nuestro servidor con éxito, abramos nuestro navegador y vayamos a este sitio web http://127.0.0.1:8000/admin

Nota: si ejecuta su proyecto en una URL diferente, no olvide cambiar esta área.

3. Registrar modelos en Django Admin

Una vez que tu proyecto está funcionando, el siguiente paso es registrar los modelos que quieres administrar.
En mi proyecto “mystore”, por ejemplo, tengo un archivo elements/admin.py donde registro las clases Element, Category y Type:

from django.contrib import admin
from .models import Element, Category, Type
admin.site.register(Element)
admin.site.register(Category)
admin.site.register(Type)

Así de sencillo: con solo registrar tus modelos, Django genera automáticamente un panel CRUD funcional.

También puedes usar un decorador para registrar modelos, algo que adopté en mis proyectos más recientes porque hace el código más limpio:

@admin.register(Element)
class ElementAdmin(admin.ModelAdmin):
   list_display = ('id', 'title', 'category', 'type')

4. ¿Qué nos permite exactamente Django Admin?

Django Admin nos ofrece una interfaz configurable mediante clases para poder crear procesos CRUD sencillos simplemente mediante un esquema de clases; en otras palabras, con tan solo definir una clase, algunos atributos como por ejemplo indicar, modelo, que campos queremos que sean administrables en los formularios, campos para el listado, filtros, etc; ya con esto Django Admin crea de manera automática un CRUD completo para estos campos:

Django Admin

Personalizar clases para crear los CRUD con Django Admin

from django.contrib import admin from .models import Comment # Register your models here. admin.site.register(Comment)

Y listo, en esta entrada vimos un ejemplo sencillo de cómo podemos emplear y personalizar Django Admin para nuestro proyecto, pero recuerda que puedes obtener más información de cómo puedes personalizar tus procesos CRUD mediante esta potente aplicación; puedes seguir viendo la documentación oficial o seguir mi curso de Django en el cual vemos un poco de todo con este famoso framework.

5. Personalizar Django Admin paso a paso

Django Admin tiene un gran nivel de personalización en cómo queremos mostrar los datos, aplicar filtros, búsquedas, que datos queremos administrar, etc; para estos tenemos que definir la serie de características implementadas desde una clase como la siguiente.

Mostrar columnas específicas con list_display

Si quieres mostrar solo ciertos campos en el listado:

class CategoryAdmin(admin.ModelAdmin):
    list_display = ('id', 'text')

admin.site.register(Comment, CategoryAdmin)

Como casi todo en Django, no es más que una clase de Python que hereda de una clase interna al framework en la cual aplicamos las características; luego, la registramos mediante site.register() en la cual indicamos el modelo y la clase admin/características.

Veamos algunas características comunes que podemos aplicar.

Definir columnas para listados

Si quieres colocar columnas específicas desde el listado, basta con definir una tupla llamada list_display con las columnas que quieres mostrar:

# Register your models here.

class CategoryAdmin(admin.ModelAdmin):
    list_display = ('id','text')

admin.site.register(Comment, CategoryAdmin)
 Establecer columnas personalizadas en el listado
 Establecer columnas personalizadas en el listado

Campos de búsqueda

Podemos especificar por cuales campos de nuestra tabla va a buscar el listado:

class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    search_fields = ('text', 'id')

Navegación por fechas

Justo debajo de la barra búsqueda, hay enlaces de navegación para navegar a través de una jerarquía de fechas:

class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    search_fields = ('text', 'id')
    date_hierarchy = 'date_posted'
Filtrar por fechas
Filtrar por fechas

Ordenado

Podemos especificar el campo de ordenación en el listado:

class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    search_fields = ('text', 'id')
    date_hierarchy = 'date_posted'
    ordering = ('date_posted',)

Filtros y búsqueda con list_filter y search_fields

Estos atributos permiten navegar grandes volúmenes de datos con facilidad:

class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    search_fields = ('text', 'id')
    date_hierarchy = 'date_posted'
    ordering = ('date_posted',)
    list_filter = ('id', 'date_posted')
Filtros por id y fecha
Filtrar por ID y fecha

Campos editables

Desde el listado, es posible que puedes modificar campos:

class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    search_fields = ('text', 'id')
    date_hierarchy = 'date_posted'
    ordering = ('date_posted',)
    list_filter = ('id', 'date_posted')
    list_editable = ('text',)
Listado de registros
Modificar comentarios desde el listado

Indicar campos administrables

Según el modelo con el cual estés trabajando, puede que te interese definir solamente algunos campos administrables (para crear y editar):

class CommentAdmin(admin.ModelAdmin):
    // ***
    fields = ('text',)
Campo formulario textarea
Agregar un comentario

Excluir campos administrables

También podemos excluir los campos administrables:

class CommentAdmin(admin.ModelAdmin):
    // ***
    #fields = ('text',)
    exclude = ('text',)
Excluir campos
Opción de exclude

Agrupar los campos de gestión

Mediante tuplas, es posible agrupar campos de formulario para colocar en una sola línea, por ejemplo, si queremos colocar el título y el slug en una sola línea, al igual que el tipo y categoría, tenemos:

@admin.register(Element)
class ElementAdmin(admin.ModelAdmin):
    list_display = ('id','title','category','type')
    fields = (('title','slug'),'description','price',('category','type'))

Y queda como:

Agrupado de campos
Agrupar campos en una sola línea

6. Registrar clases mediante un decorador

Otra forma en la cual podemos registrar las clases, es mediante un decorador:

@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    list_display = ('id','text')
    //***

7. Casos de uso y limitaciones del Django Admin

Django Admin es excelente para paneles internos, proyectos pequeños y etapas de desarrollo.
Por ejemplo, lo uso cuando necesito cargar datos de prueba o validar relaciones entre modelos antes de construir una API.

Sin embargo, no está pensado para usuarios finales. Su diseño, aunque potente, no es personalizable al nivel de un dashboard hecho a medida.

En esos casos, suelo integrar un frontend propio (React o Vue) con la API de Django.

  • Cuándo usar Django Admin:
  • Para gestión interna de datos.
  • En proyectos de prototipo o MVP.
  • Cuando necesitas un CRUD rápido y confiable.

Cuándo evitarlo:

  • Si el panel será usado por clientes o usuarios externos.
  • Cuando requieres una interfaz visual totalmente personalizada.

Extra: Cómo generar slugs automáticamente en Django Admin

Video thumbnail

Hay varias formas en las que podemos llenar automáticamente el campo del slug, pero voy a usar la que considero más sencilla y, probablemente, la más utilizada. Diría que en el 99.9% de los casos vamos a querer que el slug sea igual al título.

Para eso, vamos al admin de Django y usamos la propiedad prepopulated_fields. Indicamos que el campo slug se debe llenar a partir del campo title.

djangoshopping\<APP>\admin.py

class PostAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

Esto es una tupla, y como solo tiene un elemento, es obligatorio colocar la coma al final.
Si no la colocas, no será interpretado como tupla y te dará error.
Si colocáramos dos campos, la coma no sería obligatoria después del segundo.

Conclusión: por qué Django Admin sigue siendo una herramienta imprescindible

En mi experiencia, Django Admin es una de las joyas del framework.

Permite validar modelos, probar flujos y administrar datos sin esfuerzo.

Además, su nivel de integración con el ecosistema Django (autenticación, permisos, seguridad) lo convierte en una herramienta ideal para equipos pequeños o desarrolladores individuales.

Cada vez que inicio un nuevo proyecto, activo el panel admin desde el principio.

Es mi forma de comprobar que los modelos y relaciones funcionan correctamente antes de pasar a la fase visual o API.

Preguntas frecuentes sobre Django Admin (FAQ)

¿Qué es Django Admin?
Es el panel administrativo por defecto de Django para gestionar modelos, usuarios y datos del proyecto.

¿Cómo accedo al panel?
Ejecuta tu servidor con python manage.py runserver y entra a /admin.

¿Puedo usar Django Admin en producción?
Sí, aunque se recomienda limitar el acceso a personal autorizado y usar HTTPS.

¿Qué diferencia hay entre Django Admin y un dashboard propio?
Django Admin está pensado para administración interna; un dashboard personalizado apunta al usuario final y requiere diseño a medida.

El siguiente paso consiste en conocer como trabajar con las rutas con nombre.

Acepto recibir anuncios de interes sobre este Blog.

Vamos a hablar un poco sobre Django Admin como aplicación para manejar la administración de nuestro sitio que tenemos por defecto en cualquier aplicación que vayamos a crear con Django.

| 👤 Andrés Cruz

🇺🇸 In english