2017-08-18 50 views
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')

回答

0

您可以從self.kwargs得到的PK:

context['reviews'] = Review.objects.filter(teacher_pk=self.kwargs['pk'])