2011-06-21 12 views
0

私のクラスでエラーをget_querysetを()を使用して、例外TypeError取得は言う:ベースの汎用ビュー

の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 

としてURLを使用する:

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

今私が言う任意の特定の俳優で映画を取得したいです( 'トム')その後、私は "/映画/詳細/トム"としてURLを介してトムを渡すでしょう。私はテンプレートの中でそれを試してみましょう。

トレースバック:

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) 

例外の種類:/例/映画/詳細/アーミル 例外値ではTypeError:あなたはDetailViewをサブクラス化している場合(取得)は、正確に2つの引数(与えられた3)

答えて

1

引数を受け入れない場合は、URLキャプチャグループ((\w+))経由でBaseDetailView.get引数を渡しています。

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

キーワード引数を渡すか、get*argsを受け入れるための方法または特定の引数を上書きするのどちらか。

+0

ねえよ、ありがとう。私はDjango Generic Viewsを使って新しいです。正確に何をすべきかを詳しく教えていただけますか? –

+0

'get'メソッドをオーバーライドして、' def get(self、request、w_arg):return http.HttpResponse(w_arg) 'のようにargsを受け入れる必要があります(通常のビュー関数とまったく同じです)。 –

0

を取りますget_objectを無効にして、get_querysetを無効にしてみてください。

編集:以下雄二富田の答えは、おそらく詳細ビューのためにあなたは、おそらく正確に一つの結果を受信したいということを覚えておいてくださいself.kwargs['name'](r'^movie/detail/(?P<name>\'+)/$', MovieDetail.as_view())

を使用して、おそらく使用する必要があり、あなたの質問のための正解と思われますURLの場合は、外部キー検索を使用する代わりに一意のIDフィールドと "正確な"フィルタを使用し、 "contains"を使用する必要があります。

+0

私はget_object()を試しましたが、それでも同じエラーが表示されています。 –

+0

質問に完全なバックトレースを追加できますか? – Udi

+0

あなたのモデル名は「ムービー」か「ムービー」ですか? – Udi

関連する問題