从数据库刷新保持 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 中得到修复。
我有一个简单的模型关系:
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 中得到修复。