要するに、ListView
を使用して、教師のリストと対応する評価を表示したいと思います。ListViewは、ForeignKeysから取られたリストの各項目の評価を返します
現在、私はmodels.py
を持っている:
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Teacher')
availability = models.BooleanField(default=False)
class Review(models.Model):
teacher = models.ForeignKey(Teacher)
student = models.OneToOneField(Student, on_delete=models.PROTECT, related_name='Student')
star = models.IntegerField(default=5)
body = models.TextField()
私のリストビューでは、私がすることget_queryset()
関数を定義:
class IndexView(ListView):
def get_queryset(self):
"""Return the last five published teachers."""
return Teacher.objects.all()[:5]
今、私は私が使用できるオブジェクトteacher_list
を持っていますテンプレート。
私が使用して、個々の評価の平均採点取得する方法を知っている:私はteacher_id
の値を指定し、teacher_list
クエリに含めないように今、私は変更する必要が
Review.objects.filter(teacher_id=self.kwargs['pk']).aggregate(Avg('star'))
ですセット。したがって、teacher_list
のすべての教師はteacher.rating
属性を持っています。
This Django tutorialは、教師オブジェクトを使用して直接関連するモデルにアクセスできることを示しています。だから先生teacher_list
に、私はteacher.star_set.all()
を使用してすべてのレビューを見ることができるはずです。私は単純にこの値の平均値を見つけて何とか表示します。