Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:使用重复的slug管理id:slug之类的URL_Django_Url_Django Urls_Slug - Fatal编程技术网

Django:使用重复的slug管理id:slug之类的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 {} 我使用

使用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 {}
我使用常规视图(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"),