Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

400
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!