Django:使用重复的slug管理id:slug之类的URL
使用Django 1.5,我将slug存储在DB中 我按如下方式配置了我的URL:Django:使用重复的slug管理id:slug之类的URL,django,url,django-urls,slug,Django,Url,Django Urls,Slug,使用Django 1.5,我将slug存储在DB中 我按如下方式配置了我的URL: url(r'^(?P<id>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"), 如果两个段塞相同,我会得到以下错误: get() returned more than one GPXTrack -- it returned 2! Lookup parameters were {} 我使用
url(r'^(?P<id>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),
如果两个段塞相同,我会得到以下错误:
get() returned more than one GPXTrack -- it returned 2! Lookup parameters were {}
我使用常规视图(DetailView)呈现页面:
class TracksDetailView(DetailView):
model = GPXTrack
context_object_name = 'track'
有没有关于如何避免这种而不需要唯一的slug的想法?您将不得不覆盖视图的
获取对象的方法。你继承的那个并没有考虑到你使用的是ID和slug。它假设你传递的是pk或slug,还假设它们是唯一的。技巧很简单,但感谢你为我指明了正确的方向
该方法查找键为“pk”而不是“id”的kwargs,因此我将URL更改为:
url(r'^(?P<pk>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),
url(r'^(?P[0-9]+):(?P[-\w]+)$”,TracksDetailView.as_view(),name=“track view”),
一切都很顺利 问题似乎不是URL,而是获取GPXTrack(并返回错误)的代码。也许你最好展示一下。谢谢Daniel,我只是更新了提供代码的问题。好吧,假设我是一个id=1523
的用户,我制作了两个曲目(不管是什么),让我命名这两个monkeyTrack
如果我访问yourApp.com/1/monkeyTrack
,你的应用程序如何知道我想要哪一个,如果你想避免这个错误,你需要让slug唯一或者以某种方式限制用户!我通过id而不是slug检索曲目,因为id是唯一的:id指的是曲目id,而不是用户id
url(r'^(?P<pk>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),