0

我想将一个数字传递给我的通用视图(DetailView)以获取一个对象这是我的代码

网址模式

(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 - 它是单个对象的视图 - 您只需在类中定义modelslug属性:

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

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

(您也可以轻松地将这三个作为参数传递给 URL 定义,因此根本不需要创建子类。)

您没有获得任何值的原因self.args是您将参数作为 kwarg 而不是 arg 传递。这样self.kwargs['number']就可以了,就像我在这里显示的修改后的 URL 一样。

于 2011-12-10T18:30:47.883 回答