Как передать параметры в общие представления 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, который я показал здесь.