0

汎用ビュー (DetailView) に数値を渡して 1 つのオブジェクトを取得したい これが私のコードです

URLパターン

(r'^newreportview/(?P<number>\w+)/$', NewReportView.as_view()),  

クラスを見る

class NewReportView(DetailView):
    template_name = "report/newreportview.html"
    context_object_name = "newreportview"
    def get_queryset(self):
        task= get_object_or_404(MyTask,applicationnnumber=self.args[0])
        return task

この行に何か問題があると思います

name = get_object_or_404(MyTask,applicationnnumber=self.args[0])

エラーメッセージ:

Exception Type: IndexError
Exception Value:
tuple index out of range

この汎用ビューに「番号」を渡し、この「番号」で Mytask オブジェクトを取得するにはどうすればよいですか?

ありがとう

4

1 に答える 1

7

一般的なビューのポイント全体を見逃しています。単一のオブジェクトのビューである単純な DetailView の場合、クラスで属性modelと属性を定義するだけです。slug

(r'^newreportview/(\d+)/$', NewReportView.as_view()),  

class NewReportView(DetailView):
    template_name = "report/newreportview.html"
    model = MyTask
    slug = 'applicationnnumber'

(これら 3 つを URL 定義のパラメーターとして簡単に渡すこともできるので、サブクラスを作成する必要はまったくありません。)

の値が得られなかった理由self.argsは、パラメーターを arg ではなく kwarg として渡したためです。私self.kwargs['number']がここに示した改訂版の URL と同様に、うまくいったはずです。

于 2011-12-10T18:30:47.883 に答える