对于我的生活,我无法在线找到这个问题的答案,虽然它是一个基本问题。
我有两个模型,一个引用另一个:
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
?
答案 0 :(得分:1)
我很惊讶您无法找到有关此信息的任何信息。它是fairly well documented在第一次使用时缓存转发关系 - 会发生什么是创建缓存属性,后续查找将首先检查它。
所以是的,这意味着不会看到在另一个进程中对该对象的更改,并且每次都需要重新查询。 (另请注意,这取决于数据库的事务隔离设置,您甚至可能在重新查询时看不到新值 - 您可能需要先提交当前事务。)