Django-在get_context_data内过滤

在Django中使用基于类的视图时,DetailView内部出现了问题。

我想要获得的是特定类型的所有电影的列表,即:Movie.objects.all().filter(genre=genre_id)

class GenreView(generic.DetailView):
    model = Genre
    template_name = 'movies/genre.html'
    context_object_name = 'this_genre'
def get_context_data(self, **kwargs):
    context = super(GenreView, self).get_context_data(**kwargs)
    context.update({
        'all_movies': Movie.objects.all().filter(genre=pk),
        'all_genres': Genre.objects.all()
    })
    return context

我收到此错误:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handler
s\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handler
s\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\detail.py", line 118, in get
    context = self.get_context_data(object=self.object)
  File "C:\Users\admin\trailers\movies\views.py", line 43, in get_context_data
    'all_movies': Movie.objects.all().filter(genre=pk),
NameError: name 'pk' is not defined

当我尝试替换Movie.objects.all().filter(genre=pk)Movie.objects.all().filter(genre=kwargs['pk'])

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handler
s\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handler
s\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\views\generi
c\detail.py", line 118, in get
    context = self.get_context_data(object=self.object)
  File "C:\Users\admin\trailers\movies\views.py", line 43, in get_context_data
    'all_movies': Movie.objects.all().filter(genre=kwargs['pk']),
KeyError: 'pk'

我似乎无法找出问题所在,不胜感激!

奥兹古尔

kwargs传递给参数get_context_data不包含对象的主键值。您可以从中获取self.kwargs

Movie.objects.all().filter(genre=self.kwargs['pk'])

此外,当您在内部时,您将看到存在self.object (可以Genre读取实例)并且可以访问get_context_data,因此您也可以使用它来执行以下操作:

Movie.objects.all().filter(genre=self.object)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django 关于 get_context_data()

Django DetailView get_context_data

Django的get_context_data错误

如何使用Django get_context_data按用户和按文章过滤评论?

Django视图:get_context_data()vs get()

Django:将变量从get_context_data()传递到post()

如何使用 get_context_data 实现 Django 模板

Django覆盖get_context_data()不在模板中呈现

在Django中无法使用get_context_data

get_context_data 方法在 Django 中不起作用

如何在 Django 中使用 get_context_data()?

django CBV 中的 extra_context 和 get_context_data(**kwargs) 有什么区别

何时在Django中使用get,get_queryset,get_context_data?

Django:在get_context_data之后设置get_queryset

如何在Django中将2列求和get_context_data()

在通用detailview django中使用get_context_data重定向

Django:将kwargs参数从get_context_data()添加到ModelForm

Django DetailView-如何在get_context_data中使用'request'

使用get_context_data()方法在DetailView Django中检索依赖对象的列表

Django ContextMixin'super'对象没有属性'get_context_data'

Django:在get_context_data中设置初始名称无法正常工作

Django:在基于类的视图中的get_context_data中放置更多上下文

如何访问 get_context_data RSS Feed django 2.2 中的数据

如何在Django View get_context_data中使用request.path?

Django UpdateView get_context_data 函数调用了两次

Django -> ListView -> get_context_data() -> Model.objects.filter(self.object)

优化Django查询以避免在使用详细信息视图并覆盖get_context_data时出现重复

将 get_context_data 方法添加到基于类的视图会破坏 django-tables2

在ListView中使用`get_context_data`过滤结果