从数据库刷新保持 OneToOneField 关系

Refresh from DB keeps OneToOneField Relation

我有一个简单的模型关系:

class Foo(models.Model):
    bar = models.OneToOneField(Bar)

假设我执行以下操作:

>>> bar = Bar.objects.create()
>>> foo = Foo.objects.create(bar=bar)
>>> Foo.objects.all().delete()
>>> bar.foo is None
False

这是预料之中的,因为 bar 仍在引用 foo 对象。但是现在当我尝试从数据库中获取 bar 的新副本时,即没有相关的 foo,我尝试了:

>>> bar.refresh_from_db()
>>> bar.foo is None
False 

为什么 foo 没有像 None 一样回来?我在 docs 中看到它说在使用 refresh_from_db() 时只有模型的字段会从数据库中重新加载。在这种情况下 foo 不算作 bar 的字段吗?

您使用的是哪个 Django 版本?

Django 的早期版本在关系对象未更改其 ID 时不会清除缓存。有他们的票 https://code.djangoproject.com/ticket/29076.

它已经在新版本的 Django 中得到修复。