Relaciones de Tablas Uno a Muchos con Django
Clase 10 de 33 • 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()