簡體   English   中英

Django - 在get_context_data中過濾

[英]Django - Filtering inside of 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=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'

我似乎無法弄清楚什么是錯的,任何幫助將不勝感激!

傳遞給get_context_datakwargs參數不包含對象的主鍵值。 你可以從self.kwargs獲得它:

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

此外,當您在get_context_data時,您將看到self.object (它是已獲取的Genre實例)存在並可訪問,因此您也可以使用它來執行以下操作:

Movie.objects.all().filter(genre=self.object)
  'all_movies': Movie.objects.all().filter(genre=pk)

你真的沒有定義pk。 您需要先將pk分配給pk變量。

您也不需要包括所有:

Movie.objects.filter(genre=pk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM