每当我访问相关模型时,Django都会重新查询吗?

时间:2014-04-15 19:34:11

标签: python django

让我们说我的模型有这样的外键:

class Foo(models.Model):

  bar = models.ForeignKey(Bar)

我在Foo上有一个方法,用以下内容定义字典:

{'bar_mode': self.bar.mode,
'bar_name': self.bar.name}

如果我使用MySQL作为我的后端,这会导致对Bar表的两个单独查询吗?或者,从数据库中检索Bar的Django是否足够聪明(即,实现了一些简单的短期缓存),只能查询Bar一次并使用之前的结果?如果没有,最简单的解决方案是将self.bar存储在变量中并在整个方法中使用该变量?

1 个答案:

答案 0 :(得分:2)

没有。一旦您第一次访问它,相关实体将被缓存,随后的查找将不会再次访问数据库。

请注意,这是一个每对象缓存:如果由于任何原因您重新获取Foo实例,缓存将丢失,对bar的调用将导致另一个查询。

另请注意,当您首先查询Foo时,可以使用select_related完全取消额外的调用。