Relaciones de Tablas Uno a Muchos con Django
Clase 9 de 32 • Curso de Django
Resumen
Aprender a relacionar tablas es fundamental para manejar datos interconectados en Django
¿Cómo crear la clase Publisher?
Para iniciar, creamos la clase Publisher
que hereda de models.Model
. Incluimos atributos como name
y address
utilizando models.TextField
con un max_length
de 200, un valor que puedes ajustar según tus necesidades de datos.
class Publisher(models.Model):
name = models.TextField(max_length=200)
address = models.TextField(max_length=200)
def __str__(self):
return self.name
¿Cómo definir la clase Book?
La clase Book
también hereda de models.Model
y contiene atributos como title
, publication_date
y publisher
. Utilizamos models.DateField
para manejar fechas y establecemos una relación con Publisher
usando models.ForeignKey
.
class Book(models.Model):
title = models.TextField(max_length=200)
publication_date = models.DateField()
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
def __str__(self):
return self.title
¿Cómo relacionar Book con Publisher usando ForeignKey?
La relación se establece con models.ForeignKey
, donde especificamos el modelo relacionado (Publisher
) y el comportamiento al eliminar (on_delete=models.CASCADE
). Esto asegura que si un editor se elimina, también se eliminarán sus libros.
¿Cómo aplicar migraciones?
Para aplicar estos cambios a la base de datos, creamos y aplicamos las migraciones con los comandos:
python manage.py makemigrations
python manage.py migrate
¿Cómo usar la shell interactiva?
Para facilitar la interacción con la base de datos, instalamos ipython
con:
pip install ipython
Esto mejora la experiencia en la shell permitiendo autocompletar y otras funcionalidades útiles.
¿Cómo crear y guardar registros en la shell?
Dentro de la shell, primero creamos un Publisher
y luego un Book
relacionado.
from myapp.models import Publisher, Book
publisher = Publisher(name="Editorial Example", address="123 Main St")
publisher.save()
book = Book(title="Two Scoops of Django", publication_date="2024-07-17", publisher=publisher)
book.save()