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