是否可以确保无法删除ForeignKey
?
最好的例子是在UserProfile
上:
class UserProfile(Model):
user = models.OneToOneField('User',on_delete=models.CASCADE ...)
在创建UserProfile
对象之后,立即有信号为给定的User
创建User
。
我想确保没有人可以删除UserProfile
,因为每个User
都必须有一个UserProfile
。
我尝试了on_delete=models.PROTECT
,但不允许删除User
而不是UserProfile
。
答案 0 :(得分:0)
您可以尝试向模型中添加两个参数null=True
和on_delete=models.SET_NULL
,这样看起来就像:
user = models.OneToOneField('User', on_delete=models.SET_NULL, null=True)
答案 1 :(得分:-1)
我不知道我在哪里读书,也没有示例代码, 但是您需要使用pre_delete信号来防止删除
pre_delete:每当在UserProfile模型上启动删除操作时,都会调用信号,因此您可以在此处执行任何操作。
django.db.models.signals.pre_delete
在UserProfile模型上
from django.db.models.signals import pre_delete
class UserProfile(Model):
user = models.OneToOneField('User',on_delete=models.CASCADE ...)
def your_receiver_function(sender, instance, *args, **kwargs):
if not instance.user: //if the user is not already deleted don't delete userprofile
return False
pre_delete.connect(your_receiver_function, sender=UserProfile)