我有一个名为django.views.generic.DetailView
的基于LocationView
的类,其设置如下:
class LocationView(DetailView):
model = Location
pk_url_kwarg = 'location_id',
template_name = 'accounts/locations/view_location.html'
相应的网址定义:
url(
r'^accounts/(?P<account_id>\d+)/locations/(?P<location_id>\d+)/$'
LocationView.as_view(),
name='view_location',
)
当我尝试在浏览器中访问LocationView
时,出现以下异常:
AttributeError:通用详细信息视图必须使用调用LocationView 对象pk或slug。
经过大量挖掘后,我发现沿线的某个地方,self.pk_url_kwarg
从'location_id'
更改为('location_id', )
,导致视图无法检索到对象&#39; s pk运行时self.kwargs.get(self.pk_url_kwarg)
,因为self.kwargs
中没有任何键与修改后的pk_url_kwarg
值匹配。
为什么会发生这种情况,我该如何解决?
django.VERSION == (1, 11, 'final', 0)
答案 0 :(得分:2)
这是因为您已将其设置为元组:
pk_url_kwarg = 'location_id',
注意尾随的逗号。这就是将声明变成元组的原因。要修复它,只需删除逗号:
pk_url_kwarg = 'location_id'