En este tema, aprenderemos sobre los modelos en Django y cómo interactúan con las bases de datos. Los modelos son una parte fundamental de cualquier aplicación Django, ya que representan la estructura de los datos y proporcionan una interfaz para interactuar con la base de datos.

Objetivos

  • Comprender qué son los modelos en Django.
  • Aprender a definir modelos y sus campos.
  • Conocer cómo realizar migraciones para aplicar cambios en la base de datos.
  • Entender cómo utilizar el ORM (Object-Relational Mapping) de Django para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar).

¿Qué es un Modelo en Django?

Un modelo en Django es una clase que representa una tabla en la base de datos. Cada atributo de la clase corresponde a una columna de la tabla. Django proporciona un ORM que permite interactuar con la base de datos utilizando objetos Python en lugar de escribir consultas SQL directamente.

Definiendo un Modelo

Para definir un modelo, debes crear una clase que herede de django.db.models.Model. Cada atributo de la clase representa un campo en la base de datos.

Ejemplo de un Modelo

from django.db import models

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    birth_date = models.DateField()

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

Explicación del Código

  • Author es una clase que hereda de models.Model.
  • first_name, last_name y birth_date son atributos de la clase que representan columnas en la tabla de la base de datos.
  • models.CharField y models.DateField son tipos de campo proporcionados por Django.
  • __str__ es un método especial que define cómo se representará el objeto como una cadena.

Tipos de Campos Comunes

Tipo de Campo Descripción
CharField Campo de texto con longitud máxima.
TextField Campo de texto largo.
IntegerField Campo de número entero.
FloatField Campo de número decimal.
BooleanField Campo de valor booleano (True/False).
DateField Campo de fecha.
DateTimeField Campo de fecha y hora.
ForeignKey Campo de clave foránea para relaciones uno a muchos.
ManyToManyField Campo de relación muchos a muchos.

Migraciones

Las migraciones son una forma de aplicar cambios en la estructura de la base de datos. Cada vez que se crea o modifica un modelo, es necesario crear y aplicar una migración.

Creando una Migración

Para crear una migración, utiliza el siguiente comando:

python manage.py makemigrations

Aplicando una Migración

Para aplicar las migraciones y actualizar la base de datos, utiliza el siguiente comando:

python manage.py migrate

Operaciones CRUD con el ORM de Django

Crear

Para crear un nuevo registro en la base de datos, utiliza el método create o crea una instancia del modelo y llama al método save.

# Usando el método create
author = Author.objects.create(first_name="John", last_name="Doe", birth_date="1980-01-01")

# Usando el método save
author = Author(first_name="Jane", last_name="Doe", birth_date="1990-02-02")
author.save()

Leer

Para leer registros de la base de datos, utiliza el método all o filter.

# Obtener todos los autores
authors = Author.objects.all()

# Filtrar autores por apellido
doe_authors = Author.objects.filter(last_name="Doe")

Actualizar

Para actualizar un registro, primero obtén la instancia, modifica los atributos y luego llama al método save.

author = Author.objects.get(id=1)
author.first_name = "Jonathan"
author.save()

Eliminar

Para eliminar un registro, obtén la instancia y llama al método delete.

author = Author.objects.get(id=1)
author.delete()

Ejercicio Práctico

Ejercicio 1: Definir un Modelo de Libro

Define un modelo Book con los siguientes campos:

  • title (CharField, max_length=100)
  • author (ForeignKey a Author)
  • published_date (DateField)
  • isbn (CharField, max_length=13)

Solución

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)

    def __str__(self):
        return self.title

Ejercicio 2: Crear y Leer Registros

  1. Crea un nuevo autor y un nuevo libro.
  2. Obtén todos los libros y filtra los libros por un autor específico.

Solución

# Crear un nuevo autor
author = Author.objects.create(first_name="George", last_name="Orwell", birth_date="1903-06-25")

# Crear un nuevo libro
book = Book.objects.create(title="1984", author=author, published_date="1949-06-08", isbn="1234567890123")

# Obtener todos los libros
books = Book.objects.all()

# Filtrar libros por autor
orwell_books = Book.objects.filter(author=author)

Conclusión

En esta sección, hemos aprendido sobre los modelos en Django y cómo interactúan con las bases de datos. Hemos cubierto cómo definir modelos, realizar migraciones y utilizar el ORM de Django para realizar operaciones CRUD. Estos conceptos son fundamentales para el desarrollo de aplicaciones web con Django y te preparan para trabajar con datos de manera eficiente y efectiva. En el próximo módulo, exploraremos cómo manejar formularios en Django.

© Copyright 2024. Todos los derechos reservados