Rol de models.Model
Primero, la clase de modelo más básica en Django es models.Model
. Todos los modelos de Django se definen heredando de models.Model
. Esta clase se encarga de mapear el modelo que defino a una tabla de base de datos. Cada clase de modelo se convierte en una tabla de la base de datos y los campos dentro de ella se convierten en columnas.
Un punto importante es que al heredar de models.Model
, se ofrecen varios métodos útiles que se pueden utilizar por defecto:
save()
: método para guardar un objeto en la base de datosdelete()
: método para eliminar un objetoobjects.create()
: método para crear y guardar un nuevo objetoobjects.filter()
: método para consultar objetos que cumplen con condiciones específicas
Gracias a estas funcionalidades, al solamente heredar de models.Model
, se puede utilizar fácilmente el poderoso ORM de Django.
Relación entre AbstractUser y CustomUser
Django tiene un modelo de usuario incorporado llamado auth.User
. Se puede utilizar este modelo de manera predeterminada, pero en la mayoría de los casos, se desea personalizar el modelo de usuario. Por ejemplo, puede haber momentos en que se deseen agregar campos adicionales como número de teléfono o dirección.
En este caso, se utiliza AbstractUser
. Esta clase es una clase abstracta diseñada para permitir la extensión del modelo de usuario que Django proporciona por defecto (es decir, auth.User
). Dado que AbstractUser
también hereda de models.Model
, al heredar de AbstractUser
para definir CustomUser
, se pueden utilizar todas las funcionalidades del ORM.
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)
El modelo CustomUser
definido de esta manera ofrece todas las funcionalidades relacionadas con la autenticación de usuarios mientras permite definir libremente campos adicionales.
Rol de models.Manager y AbstractUserManager
En el modelo de Django, models.Manager
actúa como una interfaz que maneja las consultas a la base de datos. A través del administrador objects
proporcionado por defecto, se puede consultar o manipular datos fácilmente. Por ejemplo, hay métodos como filter()
, get()
, create()
.
El modelo de usuario puede utilizar AbstractUserManager
cuando necesita lógica para crear usuarios. AbstractUserManager
hereda de models.Manager
y proporciona métodos especializados para la creación de usuarios (create_user()
, create_superuser()
).
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Lógica para crear un usuario
pass
def create_superuser(self, email, password=None, **extra_fields):
# Lógica para crear un superusuario
pass
Al personalizar la lógica de creación de usuarios implementando CustomUserManager
, se puede gestionar el modelo de usuario de manera más flexible.
Resumen: Relaciones entre las clases de modelo
Hasta ahora, si resumimos las relaciones entre las clases de modelo de Django, tenemos lo siguiente:
models.Model
: clase base para todos los modelos de Django. Al heredar de ella, se mapea con la base de datos y se brinda funcionalidad de ORM.AbstractUser
: clase abstracta que hereda demodels.Model
. Se expande para definirCustomUser
.AbstractUserManager
: hereda demodels.Manager
y permite personalizar la lógica de creación de usuarios.
Comprender y aprovechar esta estructura permite diseñar el sistema de modelos de Django de manera más eficiente.
Add a New Comment