Поэтому я просто добавил представление обновлений к моему подробному представлению. Однако, когда я пытаюсь загрузить страницу после добавления кнопки «Изменить» ниже, я получаю сообщение об ошибке Generic Detail View. Что происходит?
Страница шаблона:
<td><a href = "{% url 'thing:update' thing_id=thing_id%}" class = "btn btn-primary" class>Edit</a></td>
urls.py
path('update/<slug:thing_id>/', ThingUpdateView.as_view(), name='update'),
views.py
class ThingUpdateView(LoginRequiredMixin, UpdateView):
model = ThingUser
form_class = ThingUserFormSet
template_name = "thing/update.html"
Проследить
File "C:\myapp\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\myapp\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:\myapp\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\myapp\lib\site-packages\django\views\generic\base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:\myapp\lib\site-packages\django\contrib\auth\mixins.py" in dispatch
52. return super().dispatch(request, *args, **kwargs)
File "C:\myapp\lib\site-packages\django\views\generic\base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:\myapp\lib\site-packages\django\views\generic\edit.py" in get
189. self.object = self.get_object()
File "C:\myapp\lib\site-packages\django\views\generic\detail.py" in get_object
47. % self.__class__.__name__)
Exception Type: AttributeError at /thing/update/8bv4tyrkyy/
Exception Value: Generic detail view ThingUpdateView must be called with either an object pk or a slug.





По умолчанию Django использует slug в качестве аргумента ключевого слова slug url. Поскольку вы используете thing_id, вам необходимо установить его в представлении с помощью атрибута slug_url_kwarg:
class ThingUpdateView(LoginRequiredMixin, UpdateView):
model = ThingUser
form_class = ThingUserFormSet
template_name = "thing/update.html"
slug_url_kwarg = 'thing_id'