为什么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
我有以下简单关系:
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