django - Django 2.0:必须使用对象 pk 或 slug 调用通用详细视图
问题描述
所以我只是在我的详细视图中添加了一个更新视图。但是,当我在下面添加“编辑”按钮后尝试加载页面时,我收到了通用详细信息视图错误。到底是怎么回事?
模板页面:
<td><a href="{% url 'thing:update' thing_id=thing_id%}" class="btn btn-primary" class>Edit</a></td>
网址.py
path('update/<slug:thing_id>/', ThingUpdateView.as_view(), name='update'),
视图.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'
推荐阅读
- json - Angular 更新 json 文件助手
- java - OO 设计——这种设计有缺陷吗?
- javascript - 带有2个值的php下拉列表将第二个值发布到隐藏字段
- scala - 如果列表中存在,则从列中删除单词
- powershell - 使用 powershell 检查文件是否已在特定时间范围内到达
- html - 如何使弹性项目适合两行的高度?
- javascript - 具有多个 $_POST 值的 foreach - PHP
- javascript - 如何在javascript中结合正则表达式和字符串?
- node.js - 超测:检查 res.send() 之后发生的事情
- windows - 仅在启动时的 Windows ASLR