Django:DetailView 实现 get_queryset()

Pap*_*nho 4 django django-class-based-views django-1.11

我收到以下错误:

ImproperlyConfigured at /elearning/7447932a-6044-498a-b902-97cbdd0a4001/
DetailView is missing a QuerySet. Define DetailView.model, DetailView.queryset, or override DetailView.get_queryset().
Run Code Online (Sandbox Code Playgroud)

按照DetailView上的 Django 文档,除非我想覆盖它,否则 get_query 不是强制性的。

查看.py

class CourseDetailView(DetailView):

    model = Course
    template_name='elearning/detail.html'

    def get_object(self):
        course = get_object_or_404(Course, pk=self.kwargs['pk'])
        return self.model.objects.filter(pk=pk)

    def get_context_data(self, **kwargs):
        context = super(CourseDetailView, self).get_context_data(**kwargs)
        context['now'] = timezone.now()
        return context
Run Code Online (Sandbox Code Playgroud)

网址.py

url(r'^(?P<pk>[0-9a-z-]+)/$', views.DetailView.as_view(), name='course-detail'),
Run Code Online (Sandbox Code Playgroud)

列表视图模板

 <a href="{% url 'elearning:course-detail' article.course_id %}">{{ article.title }}</a>
Run Code Online (Sandbox Code Playgroud)

模型.py

class Course(models.Model):
    course_id = models.UUIDField(default=uuid.uuid4, editable=False)
    ...
Run Code Online (Sandbox Code Playgroud)

我想知道为什么要实现 get_queryset()?

添加 get_queryset() 时仍然出现相同的错误

def get_queryset(self):
    qs = super(CourseDetailView, self).get_queryset()
    return qs.filter(pk=self.kwargs['pk'])
Run Code Online (Sandbox Code Playgroud)

Exp*_*tor 5

您的视图已命名,CourseDetailView但您DetailView在 url中使用

url(r'^(?P<pk>[0-9a-z-]+)/$', views.DetailView.as_view(), name='course-detail'),
Run Code Online (Sandbox Code Playgroud)

所以网址将是

url(r'^(?P<pk>[0-9a-z-]+)/$', views.CourseDetailView.as_view(), name='course-detail'),
Run Code Online (Sandbox Code Playgroud)