Как я могу сделать запрос через отношения "многие-ко-многим"?

Я хочу отобразить тренера для даты курса. Курс может иметь несколько дат, и для каждой даты может использоваться свой тренер. У тренера может быть разная роль на каждую дату курса. (инструктор, помощник...)

Как правильно составить запрос? Правильны ли модели для этого?

Модели:

class Course_dates(models.Model):
    date = models.DateField()
    start = models.TimeField()
    end = models.TimeField()

    def __str__(self):
        return str(self.id)
        """return self.date.strftime("%d.%m.%Y")"""

class Course(models.Model):
    course_number = models.CharField(max_length=24, blank=True)
    course_location = models.ForeignKey(Course_location, on_delete=models.CASCADE)
    course_dates = models.ManyToManyField('Course_dates', through="Course_Course_dates")

    def __str__(self):
        return self.course_number

class Trainer_Course_Course_date_role(models.Model):
    trainer = models.ForeignKey(Trainer, on_delete=models.CASCADE)
    role = models.CharField(max_length=24, blank=True)

    def __str__(self):
        return str(self.id)

class Course_Course_dates(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    course_dates = models.ForeignKey(Course_dates, on_delete=models.CASCADE)
    trainer = models.ForeignKey(Trainer_Course_Course_date_role, on_delete=models.CASCADE, null=True)


    def __str__(self):
        return str(self.id)

class Trainer(models.Model):
    salutation = models.CharField(max_length=8,choices=GENDER_CHOICES)
    last_names = models.CharField(max_length=56)
    first_names = models.CharField(max_length=56)
    date_of_birth = models.DateField()
    address = models.ForeignKey(Address, on_delete=models.CASCADE)
    email = models.EmailField()
    phone = models.CharField(max_length=56, blank=True)
    mobile = models.CharField(max_length=56, blank=True)

    def __str__(self):
        return self.last_names

Вид:

def course(request):
    courses = Course.objects.all()
    course_list = []

    for course in courses:
        sorted_date_list = course.course_dates.all().order_by('date')

        course_list.append({'course': course, 'sorted_date_list': sorted_date_list })
    
    context = { 'course_list': course_list, }
    return render(request, 'kursverwaltung_tenant/course.html', context)
Вернуться на верх