50% OFF Plus
--:--:--
¡Obtener!

Django: Django ORM

Django
Django
Actualizado: 01/07/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Django ORM

El Object-Relational Mapping (ORM) de Django constituye una de las características más distintivas del framework, proporcionando una interfaz Python elegante para interactuar con bases de datos relacionales. En lugar de escribir consultas SQL directamente, el ORM permite trabajar con objetos Python que representan tablas y registros de la base de datos.

¿Qué es un ORM?

Un ORM actúa como una capa de abstracción entre el código Python y la base de datos. Esta abstracción traduce automáticamente las operaciones realizadas sobre objetos Python en consultas SQL correspondientes, y viceversa.

El ORM de Django ofrece ventajas significativas:

  • Independencia de la base de datos: El mismo código funciona con PostgreSQL, MySQL, SQLite u otros motores
  • Seguridad integrada: Protección automática contra inyecciones SQL
  • Sintaxis pythónica: Operaciones de base de datos expresadas como métodos de objetos Python
  • Validación automática: Verificación de tipos y restricciones antes de guardar datos

Modelos: La base del ORM

Los modelos en Django son clases Python que heredan de django.db.models.Model. Cada modelo representa una tabla en la base de datos, mientras que cada atributo del modelo corresponde a un campo de esa tabla.

from django.db import models

class Producto(models.Model):
    nombre = models.CharField(max_length=100)
    precio = models.DecimalField(max_digits=10, decimal_places=2)
    descripcion = models.TextField()
    fecha_creacion = models.DateTimeField(auto_now_add=True)
    activo = models.BooleanField(default=True)

En este ejemplo, Django creará automáticamente una tabla llamada app_producto (donde app es el nombre de tu aplicación) con los campos correspondientes.

Tipos de campos principales

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Django proporciona diversos tipos de campos para modelar diferentes tipos de datos:

  • CharField: Texto con longitud limitada
  • TextField: Texto largo sin límite específico
  • IntegerField: Números enteros
  • DecimalField: Números decimales con precisión específica
  • BooleanField: Valores verdadero/falso
  • DateTimeField: Fechas y horas
  • EmailField: Direcciones de correo electrónico con validación
class Usuario(models.Model):
    username = models.CharField(max_length=50, unique=True)
    email = models.EmailField()
    edad = models.IntegerField()
    fecha_registro = models.DateTimeField(auto_now_add=True)
    es_premium = models.BooleanField(default=False)

Operaciones básicas con el ORM

Crear registros

Para crear nuevos registros, puedes instanciar el modelo y llamar al método save():

# Crear un nuevo producto
producto = Producto(
    nombre="Laptop Gaming",
    precio=1299.99,
    descripcion="Laptop para gaming de alta gama"
)
producto.save()

# Alternativa usando create()
producto = Producto.objects.create(
    nombre="Mouse Inalámbrico",
    precio=29.99,
    descripcion="Mouse ergonómico inalámbrico"
)

Consultar registros

El QuerySet es el mecanismo principal para realizar consultas. Los QuerySets son perezosos, lo que significa que no ejecutan la consulta hasta que realmente necesitas los datos:

# Obtener todos los productos
productos = Producto.objects.all()

# Obtener un producto específico
producto = Producto.objects.get(id=1)

# Filtrar productos
productos_caros = Producto.objects.filter(precio__gt=100)
productos_activos = Producto.objects.filter(activo=True)

# Combinar filtros
productos_premium = Producto.objects.filter(
    precio__gt=500,
    activo=True
)

Actualizar registros

Para actualizar registros existentes, modifica los atributos del objeto y guarda los cambios:

# Actualizar un producto específico
producto = Producto.objects.get(id=1)
producto.precio = 1199.99
producto.save()

# Actualización masiva
Producto.objects.filter(activo=False).update(precio=0)

Eliminar registros

La eliminación de registros se puede realizar sobre objetos individuales o conjuntos de registros:

# Eliminar un producto específico
producto = Producto.objects.get(id=1)
producto.delete()

# Eliminación masiva
Producto.objects.filter(precio=0).delete()

Lookups: Consultas avanzadas

Los lookups permiten realizar consultas más sofisticadas utilizando una sintaxis especial con doble guión bajo:

# Productos con precio mayor a 100
Producto.objects.filter(precio__gt=100)

# Productos cuyo nombre contiene "gaming"
Producto.objects.filter(nombre__icontains="gaming")

# Productos creados en el último mes
from datetime import datetime, timedelta
fecha_limite = datetime.now() - timedelta(days=30)
Producto.objects.filter(fecha_creacion__gte=fecha_limite)

# Productos con precios en un rango específico
Producto.objects.filter(precio__range=(50, 200))

Relaciones entre modelos

Django facilita la definición de relaciones entre modelos mediante campos especiales:

class Categoria(models.Model):
    nombre = models.CharField(max_length=50)
    descripcion = models.TextField()

class Producto(models.Model):
    nombre = models.CharField(max_length=100)
    precio = models.DecimalField(max_digits=10, decimal_places=2)
    categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)

Esta relación ForeignKey establece que cada producto pertenece a una categoría, mientras que una categoría puede tener múltiples productos.

# Crear una categoría y productos relacionados
categoria = Categoria.objects.create(
    nombre="Electrónicos",
    descripcion="Dispositivos electrónicos"
)

producto = Producto.objects.create(
    nombre="Smartphone",
    precio=699.99,
    categoria=categoria
)

# Acceder a la relación
print(producto.categoria.nombre)  # "Electrónicos"

# Consultar productos de una categoría
productos_electronicos = Producto.objects.filter(categoria__nombre="Electrónicos")

El ORM de Django transforma estas operaciones en consultas SQL optimizadas, manejando automáticamente las complejidades de las bases de datos relacionales mientras mantiene un código Python limpio y expresivo.

Completa Django y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración