そこで、学校のスケジュールを整理するものを作っています。問題の学校は、クラスが同じ部屋にまとめられ、教師が移動するように編成されており、スケジュールは毎日異なり、すべての教師またはクラスが同じ時間に建物内にいるわけではありません。の教師は、いつ教えるかについて非常にうるさいです。
私はこれらのモデルを持っています:
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"s) と教えるために必要な時間数 (合計) の比率が最小の教師です。教師の「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')
これを行う最善の方法は何ですか?これは可能ですか?