Relaciones en Modelos de Django


Modelos

Un modelo es la única fuente definitiva de información sobre sus datos. Es contiene los campos y comportamientos esenciales de los datos que almacenan. Generalmente, cada modelo mapea a una sola tabla de bases de datos.

Lo básico:

  • Cada modelo es una clase Python que subclasea django.db.models.Model.

  • Cada atributo del modelo representa un campo de base de datos.

  • Con todo esto, Django te da un API de acceso a la base de datos;

Tipos de Campos en Django

En Django, los modelos utilizan campos para definir el tipo de datos que se almacenarán en la base de datos.

Campos de Texto

  • CharField: Texto de longitud fija o limitada.

  • TextField: Texto largo sin límite específico.

Campos Numéricos

  • IntegerField: Números enteros.

  • FloatField: Números decimales de punto flotante.

  • DecimalField: Números decimales con precisión fija (ideal para dinero).

Campos de Fecha y Hora

  • DateField: Solo fecha (YYYY-MM-DD).

  • TimeField: Solo hora (HH:MM:SS.

  • DateTimeField: Fecha y hora combinadas.

Campos Booleanos

  • BooleanField: Verdadero o Falso (True/False).

  • NullBooleanField (obsoleto en Django 3.1+): Puede ser verdadero, falso o nulo.

Campos Relacionales

  • ForeignKey: Relación Muchos a Uno.

  • OneToOneField: Relación Uno a Uno.

  • ManyToManyField: Relación Muchos a Muchos.

Campos de Archivos

  • FileField: Archivos en general.

  • ImageField: Archivos de imagen (requiere instalación de Pillow).

Otros campos útiles

  • EmailField: Dirección de correo electrónico.

  • URLField: URL (enlace web).

  • SlugField: Texto corto optimizado para URLs.

  • UUIDField: Identificador único (UUID).

  • JSONField: Guarda datos en formato JSON.

Opciones de Campos en Django

Opción Descripción Ejemplo
max_length Longitud máxima del texto. nombre = models.CharField(max_length=50)
blank Permite dejar el campo vacío en formularios. descripcion = models.TextField(blank=True)
null Permite valores nulos en la base de datos. fecha = models.DateField(null=True)
default Valor por defecto si no se proporciona uno. activo = models.BooleanField(default=True)
choices Lista de opciones predefinidas para elegir. estado = models.CharField(choices=ESTADOS, max_length=10)
unique Asegura que el valor no se repita en la tabla. email = models.EmailField(unique=True)
verbose_name Nombre legible para el campo (admin, formularios). nombre = models.CharField(verbose_name="Nombre completo", max_length=50)
help_text Texto de ayuda para usuarios (admin, formularios). nombre = models.CharField(help_text="Ingrese su nombre completo", max_length=50)
editable Si False, no aparece en formularios o admin. creado = models.DateTimeField(editable=False)
primary_key Marca el campo como la clave primaria del modelo. id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
auto_now Guarda la fecha/hora actual cada vez que se guarda. actualizado = models.DateTimeField(auto_now=True)
auto_now_add Guarda la fecha/hora solo al crear el objeto. creado = models.DateTimeField(auto_now_add=True)

Relaciones en Modelos de Django

En Django, las relaciones entre modelos permiten conectar distintas tablas de la base de datos de manera sencilla y lógica. Estas relaciones reflejan cómo los datos están vinculados entre sí en el mundo real.

Tipos de Relaciones en Django

OneToOneField (Relación Uno a Uno)

Un OneToOneField es un tipo de relación en Django donde una instancia de un modelo está asociada exactamente con una única instancia de otro modelo.

Ejemplo básico

from django.db import models
from django.contrib.auth.models import User

class Perfil(models.Model):
    usuario = models.OneToOneField(User, on_delete=models.CASCADE)
    biografia = models.TextField()
    fecha_nacimiento = models.DateField()

ForeignKey (Relación Muchos a Uno)

En Django, un campo ForeignKey crea una relación muchos a uno entre dos modelos. Cada registro del modelo que contiene el ForeignKey puede referenciar un registro único de otro modelo.

Ejemplo básico

from django.db import models

class Autor(models.Model):
    nombre = models.CharField(max_length=100)

class Libro(models.Model):
    titulo = models.CharField(max_length=200)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)

ManyToManyField (Relación Muchos a Muchos)

ManyToManyField en Django se utiliza para crear una relación de muchos a muchos entre dos modelos. Esto significa que una instancia de un modelo puede estar relacionada con múltiples instancias de otro modelo, y viceversa.

Cuando defines un ManyToManyField, Django crea automáticamente una tabla intermedia en la base de datos para gestionar esas relaciones múltiples de forma eficiente.

Ejemplo básico

from django.db import models

class Estudiante(models.Model):
    nombre = models.CharField(max_length=100)

class Curso(models.Model):
    nombre = models.CharField(max_length=100)
    estudiantes = models.ManyToManyField(Estudiante)

 

Síguenos en nuestras redes sociales