Django中不必要的许多SQL查询

时间:2014-03-19 19:26:16

标签: sql django django-models django-database django-debug-toolbar

在我的所有模型中,我有一个get_absolute_url()方法,如下所示,但是使用django-debug-toolbar我发现它需要花费很多SQL查询。

我的对象在树结构中相关,因此3级对象只知道它与2级相关的1级对象。如何避免这些SQL查询?将对象与其他对象联系起来是不好的做法吗?我是否必须在我的3级模型中将1级slug和2级slug保存为CharFields

@models.permalink
def get_absolute_url(self):
    return ('url_alias', None, {'level1': self.level2.level1.slug, 'level2': self.level2.slug, 'level3': self.slug})

1 个答案:

答案 0 :(得分:1)

您网站上的slu is是永久性的吗?如果是这样,那么不断地计算你的URL是不必要的。如果您的slug是永久性的,您可以在模型上添加一个用于保存的监听器,并且在保存时,使用该对象的URL填充一个字段。然后你的get_absolute_url就可以显示出来了。

如果您的slugs不是永久性的,您可以像Matthew Daly建议的那样,将URL-for-this-object存储在缓存桶中并检查。您仍然需要弄清楚如何清除该密钥(因为如果您更改了此对象的slug或者在URL路径中更高的任何对象,则需要更改)。