2

私は次のツリー構造を持っています:

Cat 1
--Sub Cat 1
--Sub Cat 2
Cat 2
--Sub Cat 1
--Sub Cat 2
----Subsub Cat 1

django-mpttを使用すると、1つのクエリを使用してこの情報を表示できます。これはすばらしいことですが、次のようなURLを作成しようとすると次のようになります。

http://www.somesite.com/categories/cat1/subcat1/subsubcat1/

ツリー内の各カテゴリに対してSQLルックアップを実行して、親ノードのスラッグを取得します(これは理解できます)。コードは次のとおりです。

@models.permalink
    def get_absolute_url(self):
        if not getattr(self, '_slug', None):
            url = self.slug
            for ancestor in self.get_ancestors(ascending=True):
                url = url + ancestor.slug + u'/'
            self._slug = url    
        return ('catalogue_category', [str(self._slug)])

SQLに夢中になることなくURLスラッグを作成できるMPTTの機能はありますか?

4

1 に答える 1

0

あなたの質問に対する答えはノーだと思います。ダニエルがコメントですでに指摘しているように、1 つのクエリですべての先祖を取得できるはずですが、たとえば. 各アイテムのデータベースに一度ヒットする必要があるカテゴリのリストがあります。それがプロジェクトの問題である場合は、インスタンスのスラッグをどこかにキャッシュし、新しいスラッグ/タイトルに合わせpost_saveてモデルのシグナルで更新することを考えることができます!Category

于 2011-07-01T17:38:37.917 に答える