为什么django不删除一对一关系?

Why does not django delete one to one relationship?

我有以下简单关系:

class User(models.Model):
    fields here

class UserProfile(models.Model):
    user = models.OneToOneField(User)

我在 shell 中做了以下操作:

user = User.objects.create(...)
profile = UserProfile.objects.create(user=user)
user.userprofile
...<UserProfile: UserProfile object>
user.userprofile.delete()
...(1, {'accounts.UserProfile': 1})
user.userprofile
...<UserProfile: UserProfile object>

从上面可以看出,我创建了User和UserProfile实例。比我尝试删除 UserProfile 实例并且它被删除(至少看起来像)。比我做的 user.userprofile 就好像它从未被删除过一样。

在深入研究 Django 的删除方法后,我意识到当我这样做时 user.userprofile.delete() Django 只是删除了用户配置文件的 pk,其余字段没有被触及。我不明白的是我应该怎么做才能得到以下结果:

user.userprofile.delete()
user.userprofile
...RelatedObjectDoesNotExist: User has no userprofile.

有没有人有一些想法或代码片段?

您可以从数据库重新加载用户:

user = User.objects.get(pk=user.pk)

这将刷新其所有属性,包括用户配置文件。

您可以使用 Model.refresh_from_db:

user.refresh_from_db

Relevant docs