Django 当模型有两个外键具有不同的on_delete约束时,预期的行为是什么?
假设我有这个模型:Django 当模型有两个外键具有不同的on_delete约束时,预期的行为是什么?,django,Django,假设我有这个模型: class UserBook(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True) book = models.ForeignKey(Book, on_delete=models.PROTECT) 用户一次只能借一本书。如果用户被删除,我希望这个模型的实例被删除,但是如果一本书被删除,我不希望它们被删除(错误地,只是为了预防) 使用上述约
class UserBook(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
book = models.ForeignKey(Book, on_delete=models.PROTECT)
用户一次只能借一本书。如果用户被删除,我希望这个模型的实例被删除,但是如果一本书被删除,我不希望它们被删除(错误地,只是为了预防)
使用上述约束删除用户时,预期的行为是什么?我得到:
无法删除模型“UserBook”的某些实例,因为它们是
通过受保护的外键引用
有没有办法实现我想要的?我试图在
pre\u save
/post\u save
上删除用户手册,但用户作为发送者发出信号,但均无效。您试图实现的目标是通过RESTRICT
选项完成的
这是一个来自官方的例子
他们还使用模型.ForeignKey
和not模型.OneToOne
这篇文章也可能有帮助可能有另一个型号的
用户手册
外键带有on_delete=models.PROTECT
@AbdulAzizBarkat只是反复检查了一下,事实并非如此。RESTRICT
确实解决了这个问题。不幸的是,它是相当新的(>=3.1),因此没有升级就无法使用它。谢谢我利用这个机会升级了Django,现在它可以完美地满足我的需求。再次感谢!