0
我有以下設置。我有教師,可以有很多學生。他們都是Django用戶。學生可以爲教師留下評論。我正在構建教師詳細視圖。這是url /teachers/1
其中/teachers/
是列表視圖。Django Views:獲取ListView裏面詳細視圖
現在的問題:我想所有的評論,用戶離開是在給定的老師視圖中可見
。這將對應於DetailedView中的'ListView'。 Urls.py
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>[0-9]+)/$', views.TeacherView.as_view(), name='detail'),
]
Models.py
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Teacher')
availability = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.PROTECT, related_name='Student')
teacher = models.OneToOneField(Teacher, on_delete=models.PROTECT, related_name='Student')
reviewed = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class Review(models.Model):
teacher = models.OneToOneField(Teacher, on_delete=models.PROTECT, related_name='Teacher')
student = models.OneToOneField(Student, on_delete=models.PROTECT, related_name='Student')
star = models.IntegerField(default=5)
body = models.TextField()
最後的主要問題 - views.py
class IndexView(ListView):
# context_object_name = 'latest_teacher_list'
def get_queryset(self):
"""Return the last five published questions."""
return Teacher.objects.all()[:5]
class TeacherView(generic.DetailView):
model = Teacher
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(TeacherView, self).get_context_data(**kwargs)
# Add extra context from another model
context['reviews'] = Review.objects.filter(teacher_pk=pk)
return context
這不起作用,它比較pk沒有被定義的地方。它在我腦子裏做的是從URL獲取pk,然後查找user.teacher.pk(或teacher.pk或teacher_pk)= pk的所有評論對象。
我試着玩** kwags和pk取代沒有成功。
此外,作爲額外的問題,我想顯示的平均評分。
我在想rating = Review.objects.filter(teacher_pk=pk).aggregate(Avg('star')