У меня есть следующие модели в моем приложении
class Semester(models.Model):
name = models.CharField(max_length=100, unique=True)
start_date = models.DateTimeField()
end_date = models.DateTimeField()
class Classroom(models.Model):
semesters = models.ManyToManyField(to=Semester)
name = models.CharField(max_length=100, unique=True)
class AvailabilityWindow(models.Model):
semester = models.ForeignKey(to=Semester, on_delete=models.CASCADE)
start_date_time = models.DateTimeField()
end_date_time = models.DateTimeField()
optional = models.BooleanField(default=False)
label = models.CharField(max_length=100)
Я хочу добиться новой модели под названием ClassroomAvailabilityWindow
, и я хочу, чтобы она была похожа на следующий вид
select
*
from
avail_classroom_semester cs
join
avail_availabilitywindow aw
on aw.semester_id = cs.semester_id
Так что это одна запись на класс, на окно доступности, но только когда этот класс и семестр объединены их множителем
Я знаю, что могу использовать представление как модель с managed=False
но я хочу, чтобы пользователи могли обновлять эти записи. Есть ли способ достичь этого результата в django, возможно, используя опцию through
с ManyToManyField
? Это сбивает меня с толку из-за дополнительной сложности Classroom
и Semester
также , являющейся многими для многих.
В настоящее время у меня есть модель, определенная как показано ниже, но с большим количеством сигналов, настроенных для создания и уничтожения записей, когда другие записи создаются или обновляются, и мне совсем не нравится, что она работает таким образом.
class ClassroomAvailabilityWindow(models.Model):
window = models.ForeignKey(to=AvailabilityWindow, on_delete=models.CASCADE)
classroom = models.ForeignKey(to=Classroom, on_delete=models.CASCADE)
pupil_group = models.CharField(max_length=100)
subject = models.CharField(max_length=100)