Al desarrollar aplicaciones Django, una de las primeras cosas con las que nos encontramos es el modelo de base de datos básico que hereda de models.Model
. Aunque muchos tutoriales nos enseñan a simplemente seguir los pasos, al profundizar un poco más en su estructura y principios, podemos aprovechar las ventajas de Django ORM de manera más efectiva. En este artículo, examinaré detalladamente cómo se estructura el sistema de modelos de Django, centrándome en la estructura de herencia de modelos de Django y en cómo definir un modelo de usuario personalizado.
models.Model: la clase base de todos los modelos
En Django, todas las clases de modelo heredan de models.Model
. Esta clase models.Model
es la que se encarga de mapeo con las tablas de la base de datos. Cada modelo se convierte en una tabla de base de datos, y los campos del modelo se convierten en columnas de esa tabla. Los métodos proporcionados por esta clase base son los elementos que permiten las funciones clave de Django ORM.
save()
: guarda el objeto en la base de datosdelete()
: elimina un objetoobjects.create()
: crea y guarda un objetoobjects.filter()
: consulta objetos que cumplen con ciertas condiciones
Al heredar de models.Model
, se puede utilizar las funcionalidades de ORM de Django con total libertad. Esto es un ejemplo de cuán poderosamente está diseñado Django ORM.
AbstractUser y CustomUser: modelos de usuario expandibles
Django proporciona por defecto un modelo auth.User
, pero es común que cada proyecto requiera expandir y personalizar su modelo de usuario. AbstractUser
es el modelo de usuario abstracto que Django proporciona con esta capacidad de expansión. Por ejemplo, se utiliza cuando se desea añadir un campo de correo electrónico o más campos como número de teléfono o dirección.
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
address = models.CharField(max_length=255, blank=True)

Definiendo CustomUser
de esta manera, se pueden añadir campos personalizados manteniendo las funcionalidades de AbstractUser
. Dado que AbstractUser
también hereda de models.Model
, se pueden utilizar todos los métodos básicos de Django ORM.
models.Manager y AbstractUserManager: lógica de creación de usuarios y consultas de base de datos
El models.Manager
, que actúa como el administrador del modelo, es una interfaz que gestiona las consultas a la base de datos y permite utilizar métodos como filter()
, get()
, create()
a través del administrador básico llamado objects
. En caso de que se necesite un administrador especializado para un modelo de usuario, Django proporciona la clase AbstractUserManager
. A través de esta clase, se puede personalizar la lógica relacionada con la creación de usuarios.
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Lógica de creación de usuarios
pass
def create_superuser(self, email, password=None, **extra_fields):
# Lógica de creación de superusuarios
pass
El uso de este tipo de administradores permite adaptar de manera flexible la creación de usuarios a diversas situaciones que puedan surgir. Dado que AbstractUserManager
también hereda de models.Manager
, incluye todas las funciones básicas de consultas a la base de datos.
Comprendiendo la estructura de herencia de modelos en Django
Comprender la estructura de herencia de modelos de Django permite realizar un diseño e implementación de modelos más eficientes. En resumen, esto se puede resumir como sigue:
models.Model
: clase base de todos los modelos de Django, que se mapea con la base de datos y proporciona funciones ORM.AbstractUser
: clase abstracta que hereda demodels.Model
. Al heredar de esto para crearCustomUser
, se puede definir fácilmente un modelo de usuario personalizado que incluya las funcionalidades demodels.Model
.AbstractUserManager
: administrador especializado en la creación de usuarios que hereda demodels.Manager
. Permite personalizar fácilmente la lógica de creación de usuarios.
En conclusión, la estructura de modelos de Django está diseñada para ser muy flexible y potente. Incluso al expandir el modelo de usuario para añadir campos personalizados, comprender y utilizar las funciones y estructuras ORM proporcionadas por AbstractUser
y models.Model
permitirá un diseño de base de datos más eficiente y escalable. Al aprovechar bien esta estructura de modelos de Django, los desarrolladores pueden construir modelos de base de datos complejos con menos esfuerzo.
Add a New Comment