除非我将pk值设置为固定值,否则无法获取具有上下文的GCBV以按作者显示书籍

时间:2019-01-30 17:47:30

标签: django django-views

使用基于类的通用视图和带有FK(作者)的Book模型,我只能返回所有书籍或ID固定值的书籍。

使用python shell,我可以检索所需的值,例如

b.all().filter(author=6)
>>> <QuerySet [<Book: bookA>, <Book: bookB]>

但是,我似乎无法使用上下文通过GCBV进行翻译。下面,在下面的查询中,如何告诉它进行过滤(无论该页面的作者ID值是什么?即用固定值代替动态值。

Views.py

class AuthorDetailView(LoginRequiredMixin, generic.DetailView):

      context_object_name = 'author'
      queryset = Author.objects.all()

      def get_context_data(self, **kwargs):
        # call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        # add Queryset of All books
        context['book_list'] = Book.objects.filter(author=4)
        return context

每个作者页面应显示所有相关书籍。我见过的所有示例都没有使用ID,而是名称。还是基于功能的视图。如果那是唯一的方法,我可以使用FBV,但我想知道如何在两者中使用它,因此我从GCBV开始。

谢谢!

1 个答案:

答案 0 :(得分:0)

您根本不这样做。您可以在模板中使用反向关系:

 {% for book in author.book_set.all %}