从数据库刷新保持OneToOneField关系

时间:2019-09-13 15:44:35

标签: django django-models django-orm

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

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的字段?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个Django版本?

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

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

相关问题