我有以下树形结构:
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查找以获取父节点slug(这是可以理解的。)这是我的代码:
@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 slug而不会对SQL发疯?
答案 0 :(得分:0)
我认为你的问题的答案是否定的。正如丹尼尔在他的评论中已经指出的那样,它应该能够通过一个查询获得所有祖先,但我同意,例如。您有一个类别列表,您需要为每个项目按一次数据库。如果这对您的项目来说是个问题,您可以考虑在某处缓存实例的slu and并在post_save
模型的Category
信号上更新它们以适应新的slu / / titles!