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,现在它可以完美地满足我的需求。再次感谢!