让我们说我的模型有这样的外键:
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存储在变量中并在整个方法中使用该变量?
答案 0 :(得分:2)
没有。一旦您第一次访问它,相关实体将被缓存,随后的查找将不会再次访问数据库。
请注意,这是一个每对象缓存:如果由于任何原因您重新获取Foo实例,缓存将丢失,对bar的调用将导致另一个查询。
另请注意,当您首先查询Foo时,可以使用select_related
完全取消额外的调用。