reverse search and related name (Django)
El reverse search y el related name son dos conceptos que me tocó aprender dándome de bruces contra la pared.
Reverse search:
La búsqueda reversa se refiere a la capacidad de Django de permitirte acceder a las instancias de un modelo a través de su relación con otro modelo. Esto es útil cuando tienes relaciones de uno a mucho o de muchos a muchos.
Related name:
Es un atributo que se utiliza en los campos de relaciones como: ForeignKey, OneToOneField, ManyToManyField para especificar el nombre del atributo que Django creará en el modelo relacionado para acceder a esta relación en sentido inverso.
¿Qué significa todo esto?
Que podrás hacer una búsqueda reversa si tienes un related name definido. Veamos un ejemplo:
from django.db import models
class Autor(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
autor = models.ForeignKey(Autor, on_delete=models.CASCADE, related_name='books')
def __str__(self):
return self.title
Si tienes dos modelos: Autor y Book. Un autor puede tener múltiples libros (relación de uno a muchos).
Si no le asignas un nombre, Django creará uno con el prefijo del modelo y el sufijo "_set", es decir, "book_set".
Con el related_name podrás acceder a los libros de un autor por medio de la búsqueda reversa.
¿Para qué sirve?
- Legibilidad: Hace que el código sea más intuitivo y fácil de leer.
- Evita conflictos de nombres: Si hay múltiples relaciones con el mismo modelo, related_name permite especificar nombres únicos para cada relación inversa.
- Organización del código: Facilita la organización y el acceso a los datos relacionados.
En una línea: related_name permite definir nombres personalizados para acceder a relaciones inversas en los modelos.