Итак, я делаю что-то, что организует школьное расписание.Школа организована таким образом, что классы остаются вместе в одной комнате, и учитель перемещается, расписание меняется каждый день, и не все учителя или классы находятся в здании в одно и то же время, а некоторыеучителей очень привередливы, когда они преподают.
У меня есть эти модели:
class Teacher(models.Model):
christian_name = models.CharField(max_length=200)
family_name = models.CharField(max_length=200)
...
class TeacherAvailableHour(models.Model):
teacher = models.ForeignKey('Teacher')
class Requirement(models.Model):
...
teacher = models.ForeignKey('Teacher')
per_week = models.PositiveIntegerField()
...
Поэтому я пытаюсь сначала составить расписание для самых требовательных учителей, а именноте с наименьшим соотношением между тем, когда они могут преподавать (общее количество «TeacherAvailableHour») и количеством часов, которое они должны преподавать (сумма всех «Requirement.per_week» учителя).
ВДругими словами, мне нужно, чтобы "order_by" это соотношение.Я не могу думать о том, как это сделать.Попробовал это:
Teachers=Teacher.objects.annotate(availability=(Count('teacheravailablehour') / Sum('requirement__per_week')).order_by('availability')
Это взрывается с ошибкой, конечно.Я также попробовал что-то вроде двойной аннотации:
Teachers=Teacher.objects.annotate(availability=Count('teacheravailablehour')).annotate(required=Sum('requirement__per_week')).annotate(availRatio=(('availability') / ('required')).order_by('-availRatio')
Каков наилучший способ сделать это?Это вообще возможно?