related_name y búsquedas inversas
Recorra las relaciones en ambas direcciones
related_name y búsquedas inversas es una lección gratuita de Django Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Django Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Django Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Links Go Both Ways
You set a ForeignKey from book to author, but you can also walk it backward. A reverse lookup reaches the many side from the one side.
The Default _set Manager
By default Django names the reverse accessor modelname_set. From an author, the books appear as book_set.
author = Author.objects.first()
author.book_set.all()_set Is a Manager
That book_set is a full manager, so you can chain filter, order_by, and count on it just like any query.
author.book_set.filter(published=True).count()Naming with related_name
The _set name is clunky. Set related_name on the ForeignKey to pick a clearer reverse accessor yourself.
author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)A Cleaner Reverse
Now the reverse reads naturally. Instead of book_set you simply write books, which is far easier to follow.
author.books.all()Reverse in Queries
related_name also drives filter across the link. Use the chosen name with the double underscore from the other model.
Author.objects.filter(books__published=True)The Default Query Name
If you skip related_name, the reverse query name is the lowercase model name, like author.objects.filter(book__title=...).
Avoiding Name Clashes
Two ForeignKeys from one model to the same target collide on the reverse name. A distinct related_name on each fixes it.
writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)Turning Off the Reverse
Set related_name to a value ending in + to disable the reverse accessor entirely when you never need it.
owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)related_query_name
You can split the names: related_query_name sets the filter name separately from the attribute used to read related rows.
tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")Works for Every Relation
related_name applies to ForeignKey, ManyToManyField, and OneToOneField alike, so every reverse path can read clearly.
Quick Check
You set related_name="books" on Book's author ForeignKey. How do you list an author's books?
Recap
You did it! Reverse lookups walk a link backward, and related_name turns clunky _set accessors into clear, readable names. 🔄
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «related_name y búsquedas inversas» es gratis?
Sí — el texto completo de «related_name y búsquedas inversas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Django Academy, actualiza a CoddyKit PRO. El curso de Django Academy incluye 4 lecciones en total.
¿Qué aprenderé en «related_name y búsquedas inversas»?
Recorra las relaciones en ambas direcciones Practicas Django Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Django Academy?
No se requiere experiencia previa. Django Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «related_name y búsquedas inversas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Django Academy?
Sí. Cada lección de Django Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- ForeignKey y on_delete
- ManyToManyField y modelos Through
- OneToOneField para perfiles
- related_name y búsquedas inversas