Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django视图:在详细视图中获取ListView_Django_Django Views - Fatal编程技术网

Django视图:在详细视图中获取ListView

Django视图:在详细视图中获取ListView,django,django-views,Django,Django Views,我有以下设置。我有老师,可以有很多学生。他们都是Django用户。学生可以给老师留下评论。我正在构建教师详细视图。这是url/teachers/1,其中/teachers/是列表视图 现在的问题是: 我希望用户留下的所有评论在给定的教师视图中可见。这将对应于DetailedView中的“ListView”。 url.py urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^(?P&

我有以下设置。我有老师,可以有很多学生。他们都是Django用户。学生可以给老师留下评论。我正在构建教师详细视图。这是url
/teachers/1
,其中
/teachers/
是列表视图

现在的问题是:

我希望用户留下的所有评论在给定的教师视图中可见。这将对应于DetailedView中的“ListView”。 url.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.TeacherView.as_view(), name='detail'),
]
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()
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
最后是主要问题-views.py

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.TeacherView.as_view(), name='detail'),
]
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()
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的所有审阅对象

我试着玩**Kwag,用pk代替,但没有成功

另外,作为补充问题,我想显示平均评分


我想到的是
rating=Review.objects.filter(teacher\u pk=pk).aggregate(Avg('star')
你可以从
self.kwargs
获得pk:

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