Как передать параметры в общие представления Django

Я хотел бы передать число в мой общий вид (DetailView), чтобы получить один объект Вот мой код

URLPATTERN

(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 с этим "числом"?

Спасибо

1 ответ

Решение

Вы упустили весь смысл общих взглядов. Для простого DetailView, представляющего собой отдельный объект, вы просто определяете model а также slug атрибуты в классе:

(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, который я показал здесь.

Другие вопросы по тегам