0

Django 1.5を使用してスラッグをDBに保存しています

次のようにURLを構成しました。

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

そして、私のポデルには次のものがあります。

@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'

ユニークなスラッグを必要とせずにこれを回避する方法について何か考えはありますか?

4

2 に答える 2

0

トリックは簡単でしたが、正しい方向に向けてくれてありがとう!

メソッドget_objectは、「id」ではなく「pk」キーを持つ kwargs を検索するため、URL を次のように変更しました。

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 とスラッグを使用していることを考慮していません。pk または slug のいずれかを渡していると想定し、それらが一意であると想定しています。

于 2013-04-05T12:53:27.623 に答える