Django MPTT - абсолютный URL для категории - PullRequest
1 голос
/ 01 июля 2011

У меня есть следующая древовидная структура:

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)])

Есть ли какая-нибудь функциональность MPTT, которая позволит мне создавать URL-слаг, не сходя с ума по SQL?

1 Ответ

0 голосов
/ 01 июля 2011

Я думаю, что ответ на ваш вопрос - нет.Как Даниэль уже указывает в своем комментарии, он должен быть в состоянии собрать всех предков одним запросом, но я согласен, что например.у вас есть список категорий, вам нужно будет нажать на базу данных для каждого элемента один раз.Если это проблема для вашего проекта, вы можете подумать о кэшировании слагов экземпляра где-нибудь и обновлении их по сигналу post_save вашей Category модели, чтобы соответствовать новым слагам / заголовкам!

...