使用Django 1.5我将slug存储在DB
中我将我的网址配置如下:
url(r'^(?P<id>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),
在我的podel中我有:
@models.permalink
def get_absolute_url(self):
return ('track-view', [str(self.id), str(self.slug)])
如果2个slug相同,我会收到以下错误:
get() returned more than one GPXTrack -- it returned 2! Lookup parameters were {}
我使用通用视图(DetailView)来呈现页面:
class TracksDetailView(DetailView):
model = GPXTrack
context_object_name = 'track'
如何避免这种而不需要独特的slu <?
答案 0 :(得分:0)
您必须覆盖视图的get_object
方法。您继承的那个没有考虑到您正在使用ID和slug。它假设你传递了一个pk或一个slu - 而且还假设它们是唯一的。
答案 1 :(得分:0)
诀窍很简单,但感谢你指出了正确的方向!
方法get_object寻找带有键'pk'而非'id'的kwargs,因此我将我的网址更改为:
url(r'^(?P<pk>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),
一切正常!