2011-06-21 49 views
0

錯誤說:獲取類型錯誤在我的班級使用get_queryset()基於通用視圖

的get()到底需要2個參數(3給出)

我子分級的DetailView爲:

class MovieDetail(DetailView): 
    template_name = 'examples/generic_movie_detail.html' 
    template_object_name = 'movie' 

    def get_queryset(self): 
     movie = get_object_or_404(Movies, actors__name__contains = self.args[0]) 
     return movie 

,並使用網址爲:

(r'^movie/detail/(\w+)', MovieDetail.as_view()) 

現在我想通過任何特定的演員來檢索電影說('湯姆'),那麼我會通過網址將湯姆傳遞給「/ movie/detail/tom」。然後我會在我的模板中解決它。

回溯:

File "C:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "C:\Python26\lib\site-packages\django\views\generic\base.py" in view 
    47.    return self.dispatch(request, *args, **kwargs) 
File "C:\Python26\lib\site-packages\django\views\generic\base.py" in dispatch 
    68.   return handler(request, *args, **kwargs) 

異常類型:類型錯誤在/例子/電影/細節/阿米爾 異常值:get()方法到底需要2個參數(3給出)

回答

1

當您不接受參數時,您將通過您的URL捕獲組((\w+))傳遞BaseDetailView.get參數。

class BaseDetailView(SingleObjectMixin, View): 
    def get(self, request, **kwargs): #<-- only keyword args 

無論它傳遞關鍵字參數或覆蓋get方法接受*args或您的具體參數。

+0

Hey Yuji謝謝。我是新的使用Django通用視圖。你能否詳細說明究竟應該做什麼? –

+0

你需要重寫'get'方法來接受參數 - 比如'def get(self,request,w_arg):return http.HttpResponse(w_arg)'(它的工作方式與普通視圖函數完全相同)。 –

0

如果你繼承DetailView ,請嘗試覆蓋get_object而不是get_queryset

編輯:下面虞姬富田的答案似乎是你的問題的正確答案,你應該使用可能使用self.kwargs['name'](r'^movie/detail/(?P<name>\'+)/$', MovieDetail.as_view())

請記住,對於詳細視圖,您可能希望接收只有一個結果對於url,您應該使用唯一標識字段和「精確」過濾器,而不是使用外鍵查找並使用「contains」。

+0

我試過get_object(),但它仍然顯示相同的錯誤。 –

+0

您可以將完整的回溯添加到您的問題中嗎? – Udi

+0

您的模特名稱是「電影」還是「電影」? – Udi

相關問題