【问题标题】:Why does not django delete one to one relationship?为什么django不删除一对一的关系?
【发布时间】:2016-08-15 14:29:47
【问题描述】:

我有以下简单的关系:

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 只是删除了 userprofile 的 pk,其余字段没有被触及。我不明白的是我应该怎么做才能得到以下结果:

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

有没有人有一些想法或代码sn-ps?

【问题讨论】:

    标签: python django django-models django-queryset one-to-one


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      你可以使用Model.refresh_from_db:

      user.refresh_from_db
      

      Relevant docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        相关资源
        最近更新 更多