Django默认缓存外键模型

时间:2014-06-23 19:16:21

标签: django

对于我的生活,我无法在线找到这个问题的答案,虽然它是一个基本问题。

我有两个模型,一个引用另一个:

class A(models.Model):
    name = models.CharField(...)
    ...

class B(models.Model):
    a = models.ForeignKey(A)

现在,我将B的实例保留在内存中,并且经常访问b.a.name。访问b.a.name每次都会导致数据库查询,以便在我的进程中看到a.name(由另一个进程完成的更改)中的更改吗?或者每次都必须明确查询a

1 个答案:

答案 0 :(得分:1)

我很惊讶您无法找到有关此信息的任何信息。它是fairly well documented在第一次使用时缓存转发关系 - 会发生什么是创建缓存属性,后续查找将首先检查它。

所以是的,这意味着不会看到在另一个进程中对该对象的更改,并且每次都需要重新查询。 (另请注意,这取决于数据库的事务隔离设置,您甚至可能在重新查询时看不到新值 - 您可能需要先提交当前事务。)