Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

398
Vistas
Relación ManyToMany entre dos modelos en Django

Estoy tratando de crear un sitio web en el que los usuarios puedan agregar los cursos que están tomando. Quiero saber cómo debo agregar la relación ManyToMany. De modo que podamos incluir a todos los usuarios en un curso según el código del curso, el instructor o cualquier campo. Y también podemos obtener los cursos en los que está inscrito el usuario. Actualmente, la estructura de mi base de datos es:

 class Course(models.Model): course_code = models.CharField(max_length=20) course_university = models.CharField(max_length=100) course_instructor = models.CharField(max_length=100) course_year = models.IntegerField(('year'), validators=[MinValueValidator(1984), max_value_current_year]) def __str__(self): return self.course_code

y mi modelo de usuario:

 class Profile(AbstractUser): bio = models.TextField() image = models.ImageField(default='defaults/user/default_u_i.png', courses = models.ManyToManyField('home.Course',related_name='courses') def __str__(self): return self.username

Me preguntaba si la relación ManyToMany debería estar en el modelo de usuario o en el modelo de curso. ¿O hará alguna diferencia en absoluto?

EDITAR : para agregar un curso al objeto de publicación ahora estoy usando esta vista, pero parece que no funciona:

 @login_required def course_add(request): if request.method == "POST": form = CourseForm(request.POST or none) if form.is_valid(): course = form.save() request.user.add(course) else: form = CourseForm context = { 'form':form } return render(request,'home/courses/course_add.html', context)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Para bases de datos relacionales, el modelo en el que defina ManyToManyField no importa. Django creará una tabla adicional con dos ForeignKey s para los dos modelos que están vinculados por ManyToManyField .

Los administradores relacionados que se agregan, etc. son toda la lógica de Django. Detrás de las cortinas, consultará la mesa en el medio.

Sin embargo, debe corregir el parámetro related_name=… [Django-doc] . El related_name especifica el nombre de la relación a la inversa , de Course a Profile en este caso. Por lo tanto, debería ser algo así como 'profiles' :

 class Profile(AbstractUser): bio = models.TextField() image = models.ImageField(default='defaults/user/default_u_i.png', courses = models.ManyToManyField('home.Course' , related_name='profiles' ) def __str__(self): return self.username

Así puedes obtener las personas que participan en un Course objeto con:

 mycourse .profiles.all()

y puedes acceder a los courses en los que un Profile está matriculado con:

 myprofile .courses.all()

Para obtener más información, consulte la sección Relaciones de muchos a muchos de la documentación .

Puede agregar un curso a los cursos de un usuario con:

 @login_required def course_add(request): if request.method == 'POST': form = CourseForm(request.POST) if form.is_valid(): course = form.save() request.user .courses.add(course) else: form = CourseForm() context = { 'form': form } return render(request,'home/courses/course_add.html', context)
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda