ManyToManyField y modelos Through
Conecte registros en ambas direcciones con datos adicionales
ManyToManyField y modelos Through es una lección gratuita de Django Academy en CoddyKit. Esta es la lección 2 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.
Both Sides Have Many
Sometimes each side links to many of the other: a post has many tags, a tag marks many posts. That is a many-to-many relationship.
Declaring ManyToManyField
Add a ManyToManyField pointing at the other model. Django handles the link from both directions automatically.
class Post(models.Model):
tags = models.ManyToManyField(Tag)The Hidden Join Table
Behind the scenes Django builds a join table holding pairs of ids. No new column lands on either of your two models.
Adding Relations
Once a post is saved, attach tags with add. You can pass several objects at once in a single call.
post.tags.add(python_tag, web_tag)Removing and Clearing
Drop a single link with remove, or wipe them all with clear. The related objects themselves stay safe.
post.tags.remove(web_tag)
post.tags.clear()Reading the Set
Access linked rows through the field like a normal manager. Call all to loop over everything connected.
for tag in post.tags.all():
print(tag.name)When the Link Needs Data
What if a membership has its own facts, like a join date? A plain join table cannot hold extra columns, so you need more control.
The through Model
A through model is your own table for the relationship. It lets each link carry extra fields you define.
members = models.ManyToManyField(User, through="Membership")Defining the through Class
The through model holds a ForeignKey to each side plus any extra fields. Those columns describe the connection itself.
class Membership(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
joined = models.DateField()add Stops Working
With a custom through model, plain add is disabled. You create the link by making a through row directly instead.
Membership.objects.create(user=u, group=g, joined=today)Querying Across M2M
Filter through a many-to-many link with the double underscore, just like a ForeignKey. The join table is handled for you.
Post.objects.filter(tags__name="python")Quick Check
Your group membership needs to record when each user joined. What do you reach for?
Recap
Well done! A ManyToManyField links both sides freely, and a through model lets each connection carry its own data. 🏷️
Preguntas frecuentes
¿La lección «ManyToManyField y modelos Through» es gratis?
Sí — el texto completo de «ManyToManyField y modelos Through» 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 «ManyToManyField y modelos Through»?
Conecte registros en ambas direcciones con datos adicionales 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 2 de 4.
¿Cuánto tiempo toma la lección «ManyToManyField y modelos Through»?
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