Personalizar el Panel Administrativo de Django
Una de las características de Django es que cuenta con un panel de administración listo para usarse, con funciones básicas como crear, leer, editar y eliminar modelos, usuarios, grupos y permisos. Todo listo con tan solo generar un nuevo proyecto. Pero a menudo se desea modificar su apariencia, las vistas de los modelos o incluso la funcionalidad para que se ajuste a las necesidades del proyecto.
Accediendo al Panel Administrativo de Django
Antes de acceder al panel administrativo, debemos contar con un proyecto de Django. Para ello debemos seguir los siguientes pasos:
1. Crear un nuevo directorio para el proyecto
Elige un destino para tu proyecto y luego crea un nuevo directorio con el nombre para el proyecto:
mkdir custom-admin-django && cd custom-admin-django
Info
Modifica el nombre por el que desees, el comando anterior simplemente está creando un nuevo directorio y entrando en ese directorio a la vez. En distribuciones basadas en Linux, el comando anterior se puede abreviar con take custom-admin-django
2. Crear un entorno virtual
Existen muchas maneras de crear un entorno virtual, para efectos prácticos haremos uso del paquete venv incluido en la mayoría de instalaciones de Python:
python3 -m venv venv
3. Activar entorno virtual
Una vez se crea el entorno virtual, observarás que se creó una nueva carpeta con el nombre de venv y dentro se encuentra una instalación limpia de Python que tenemos que activar para empezar a instalar los paquetes. Para ello debemos ejecutar el comando que corresponda según el sistema operativo que utilices:
source venv/bin/activate
.venv\Scripts\activate
4. Instalar Django
Ahora que ya tenemos el entorno virtual creado y activado, podemos instalar django usando pip:
pip install django
5. Generar un nuevo proyecto de django
Una vez instalado django, procedemos a generar un nuevo proyecto en el directorio actual:
django-admin startproject _site .
Ahora tenemos que ejecutar el servidor de desarrollo con el comando python manage.py runserver
y visitamos la URL http://127.0.0.1:8000/:
python manage.py runserver 8080
$ python manage.py runserver 8080
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 09, 2025 - 23:41:14
Django version 5.1.4, using settings '_site.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
Como resultado al abrir la URL, veremos la página por defecto de Django:
Sin hacer nada más, podemos ir a http://127.0.0.1:8080/admin y veremos la página de login:
Todo esto se debe que un proyecto creado con el comando startproject
ya viene correctamente configurado y trae habilitado el panel administrativo. Significa que ya trae las aplicaciones django.contrib.admin
, django.contrib.auth
, y django.contrib.contenttypes
por defecto en el archivo settings.py
:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
# Otras aplicaciones
]
Y también vienen ya configurada las URLs de administración en el archivo urls.py
en el proyecto:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Hasta ahora solo hemos podido visualizar la página de login, pero para acceder tenemos que ejecutar las migraciones y luego crear a un superusuario administrador.
Ejecutar Migraciones
python manage.py migrate
Crear superusuario
DJANGO_SUPERUSER_PASSWORD=123456 python manage.py createsuperuser --username=admin --email=admin@example.com --noinput
Info
El comando anterior permite la creación desatendida del superusuario para ingresar como al panel administrativo.
Ahora podemos iniciar sesión con el superusuario en el panel adminsitrativo y al iniciar la sesión se nos muestra la siguinte interfaz:
De forma predeterminada, Django incluye los modelos Users y Groups como parte de su sistema de autenticación y autorización. Estos modelos están definidos en la aplicación django.contrib.auth
, que es una de las aplicaciones incluidas de forma predeterminada en la configuración de Django.
Crear un modelo personalizado que replique la funcionalidad del modelo Group
Podemos crear un modelo de ejemplo llamado Comite
que funcione de manera similar a Group
, y luego asociarlo con los usuarios. Esto nos permite personalizar completamente el comportamiento y los nombres en nuestra aplicación, sin alterar el comportamiento de la aplicación de autenticación predeterminada.
from django.contrib.auth.models import User, Permission
from django.db import models
class Comite(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return self.name
Crear una relación muchos a muchos con User
Luego, añadimos un campo de relación muchos a muchos en el modelo User
que vincule a los usuarios con los comités, al igual que se hace con el modelo Group
de manera predeterminada. Una opción es extender el modelo User
y crear un modelo llamado por ejemplo Profile
que este relacionado con User
, y dentro de este agregar el campo de relación Comite
:
from django.contrib.auth.models import User
from django.db import models
from .models import Comite # Asegúrate de importar el modelo Comite
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
comites = models.ManyToManyField(Comite, related_name="miembros", blank=True)
def __str__(self):
return f"Perfil de {self.user.username}"