【问题标题】:Remove ForeignKey relationship删除外键关系
【发布时间】:2016-12-16 10:34:57
【问题描述】:

我想删除 BUser 和 Profile 之间的关系:

由于 ForeignKey 不允许空值,我必须像这样迭代(性能很糟糕!)以删除所有关系:

for u in user.profile_set.all(): 
    u.delete()



class Profile(models.Model):
    user = models.ForeignKey('BUser')

class BUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=40, unique=True)

还有另一种删除所有关系的方法[具有更好的性能]? 我试过了:

obj.transparentprofile_set = None
obj.transparentprofile_set.clear()
obj.transparentprofile_set.empty()

但是,就像我说的那样,由于 ForeignKey 中没有 null=True,所以我不能使用它们。

【问题讨论】:

标签: django


【解决方案1】:

您可以使用我的方式,而不是通过点 ORM 子等objects.childs_set 触摸相关模型,其更清晰和人类可读的代码:

# Get user instance
user = User.objects.get(pk=<uid>)
# Remove profiles
Profile.objects.filter(user=user).delete()

另外,您需要记住 related_name 模型参数,因此您可以使用 profile_set

class Profile(models.Model):

    user = models.Foreignkey(
        to=User,
        related_name='profiles'
    )

    # Use related name alias in code
    profiles = user.profiles.all()
    profile = user.profiles.filter(pk=<profile_id>)

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2020-12-02
    相关资源
    最近更新 更多