删除ForeignKey关系

时间:2016-12-16 10:34:58

标签: django

我想删除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我不能使用它们。

1 个答案:

答案 0 :(得分:0)

您可以使用我的方式,而不是通过点缀的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>)