Django中不必要的SQL查询



在我所有的模型中,我有一个get_absolute_url()方法如下所示,但是使用django-debug-toolbar,我看到它花费了许多SQL查询。

我的对象在树结构中是相关的,所以3级对象通过2级只知道与它相关的1级对象。如何避免这么多SQL查询?通过其他对象来关联对象是不好的做法吗?在三级模型中,我是否必须将一级段塞和二级段塞保存为CharFields ?

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

您的站点上的鼻涕虫是永久性的吗?如果是这样,那么像这样不断地计算URL是不必要的工作。如果您的slugs是永久性的,那么您可以在您的模型上添加一个用于保存的侦听器,并且,在节省时间时,用对象的URL填充字段。那么你的get_absolute_url就可以显示这个

如果您的slugs不是永久性的,您可以按照Matthew Daly的建议,将此对象的url存储在缓存桶中并进行检查。您仍然需要弄清楚如何清除该键(因为如果更改此对象或URL路径中任何对象的分隔符,则需要更改该键)。

相关内容

  • 没有找到相关文章

最新更新