Я хочу отобразить тренера на дату курса. У курса может быть несколько дат, и в каждую дату можно использовать разных тренеров. У тренера может быть разная роль в каждую дату курса. (Инструктор, помощник...)
Как сделать правильный запрос? Подходят ли модели для этого?
Модели:
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)
course_dates
— это поле m2m моделиCourse
и внешний ключCourse_Course_dates
. Какой использовать?Да, курс (курс) может иметь несколько дат курса (Course_dates). Course_Course_dates является связующим звеном между этим и тренером.
Ах, ты прав, я не заметил
through
Попробуйте так:
Trainer.objects.filter(course_course_dates_set__course_dates__in=Course_dates.objects.filter(date='...', start='...', end='...',))
Это позволит получить всех инструкторов, которые удовлетворяют указанным датам курса, используя сквозную модель.
Благодарю вас! Но именно так я получаю всех тренеров на один курс. Но если несколько курсов проходят одновременно, это не работает. Или? Поэтому мне нужно подключение к курсу с индивидуальным номером курса.
Нет, все равно получат всех тренеров на всех курсах, соответствующих этим датам. Если вам нужно несколько дат, вы можете настроить запрос на
Course_dates