2013-04-05 3 views
0

Использование Django 1.5 Я храню слизняка в БДДжанго: Управление URLs как идентификатор: слизняк с дублированным слизняк

Я настроил мои URLs нравится следующим образом:

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 слизни то же самое я получаю следующую ошибку:

get() returned more than one GPXTrack -- it returned 2! Lookup parameters were {} 

Я использую общий вид (DetailView) для отображения страницы:

class TracksDetailView(DetailView): 
    model = GPXTrack 
    context_object_name = 'track' 

Любая идея о том, как избежать этого без необходимости уникальных слизней?

+0

Проблема не в том, что URL-адрес, это код, который получает GPXTrack (и возвращает ошибку). Возможно, вам лучше это показать. –

+0

Спасибо, Дэниэл, я просто обновляю вопрос, предоставляя код – danfreak

+0

Ну, скажем, я пользователь с 'id = 1523', и я делаю два' трека' (что бы это ни было), и, скажем так, я называю оба 'monkeyTrack', как ваше приложение знает, какой из них я хочу, если я получаю доступ к 'yourApp.com/1/monkeyTrack', вам нужно, чтобы пули были уникальными или каким-то образом ограничили пользователей, если вы хотите избежать этой ошибки! –

ответ

0

Вам необходимо переопределить метод get_object вашего вида. Тот, который вы наследуете, не учитывает, что вы используете идентификатор и пул. Предполагается, что вы передаете pk или slug, а также предполагает, что они уникальны.

0

Трюк был прост, но спасибо, что указал мне в правильном направлении!

Ну метод get_object ищет kwargs с ключом «рк», а не «ид», поэтому я изменил мои URLs на:

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

И все работало отлично!