0

使用 Django 1.5 我将 slug 存储在数据库中

我配置了我的网址,如下所示:

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'

关于如何在不需要独特的蛞蝓的情况下避免这种情况的任何想法?

4

2 回答 2

0

诀窍很简单,但感谢您为我指明了正确的方向!

好吧,get_object方法会查找键为 'pk' 而不是 'id' 的 kwargs,因此我将网址更改为:

url(r'^(?P<pk>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),

一切正常!

于 2013-04-05T13:40:24.483 回答
0

您将不得不覆盖视图的get_object方法。您继承的没有考虑到您正在使用 ID 和 slug。它假设您正在传递 pk 或 slug - 并且还假设它们是独一无二的。

于 2013-04-05T12:53:27.623 回答