【问题标题】:Unnecessary many SQL queries in DjangoDjango中不必要的许多SQL查询
【发布时间】:2014-04-26 07:21:25
【问题描述】:

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

我的对象是树形结构相关的,所以一个级别3的对象只能通过级别2知道它与哪个级别的对象相关。如何避免这么多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})

【问题讨论】:

  • 避免使用此查询访问数据库的一种方法是使用缓存框架

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


【解决方案1】:

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

如果您的 slug 不是永久性的,您可以按照 Matthew Daly 的建议进行操作,并将此对象的 URL 存储在缓存桶中并进行检查。您仍然需要弄清楚您想如何清除该键(因为如果您更改此对象或 URL 路径中更高位置的 any 对象的 slug,则需要更改它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2012-09-30
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多