所以我正在做一些安排学校日程的东西。有问题的学校是这样组织的,班级呆在同一个房间,老师移动,每天的时间表都不一样,而且不是所有的老师或班级都在同一时间,有些的老师在教学时非常挑剔。
我有这些模型:
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')
做这个的最好方式是什么?这甚至可能吗?