当模型具有两个具有不同 on_delete 约束的外键时,预期行为是什么?

莫塔

假设我有这个模型:

class UserBook(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
    book = models.ForeignKey(Book, on_delete=models.PROTECT)

用户一次只能借一本书。如果用户被删除,我希望这个模型的实例也被删除,但我不希望它们被删除,如果一本书被删除(错误地,只是一个预防措施)。

使用上述约束删除用户时的预期行为是什么?我得到:

无法删除模型“UserBook”的某些实例,因为它们是通过受保护的外键引用的

有没有办法实现我想要的?我试图删除作为发件人的pre_save/post_save信号上的UserBook,User但都没有奏效。

长春花

您要实现的目标是通过RESTRICT选项完成的

这是官方文档中的示例

他们也使用models.ForeignKey而不是models.OneToOne

这篇文章也可能有帮助https://stackoverflow.com/a/38389488/13482680

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

on_delete对Django模型有什么作用?

on_delete = models.PROTECT和on_delete = models.CASCADE对Django模型有什么作用?

如何自动更新外键使其具有“,on_delete = models.PROTECT”

具有两个条件的嵌套 if 与 if 语句的行为不同:

AngularJS-具有相同名称但在不同模块中的两个指令的预期行为是什么?

具有相同列表的两个变量具有不同的ID .....为什么?

将具有不同列类型的所有两个SELECT联合-预期行为?

如何在Rails 3.2应用程序中从具有不同键的两个模型创建数组?

用于同时编辑具有外键关系的两个Django模型的表单

具有两个外键的中间模型:文件结构?

如何为具有相同关系的两个外键的模型编写关联?

如何从Django中具有外键关系的两个模型中选择值

如何为具有两个外键的模型创建范围?

Django-具有两个以上外键的模型

如何在 Django 中将外键设置为 <null>(没有 on_delete=models.SET_NULL)

参数'on_delete'没有值

是否可以要求两个不同的TypeScript接口具有相同的键但能够具有不同的值?

为什么这两个右值引用示例具有不同的行为?

具有相同长度的两个输入列表与具有不同长度的两个输入列表的行为不同(方案)

为什么两个不同查询的结果在phpMyadmin中具有不同的UI?

查找两个不同的键在 2 个 PHP 数组中是否具有相同的值

具有两个相同外键的Django Inlineformset

具有指向相同对象的具有不同值的两个指针是否是未定义的行为?

如何获得具有不同键但在php中具有相同值的两个多维数组的差异?

当具有相似值的列具有相似的行值时合并两个不同的数据帧

在具有两个输出的模型中使用定制keras图层创建时出错

将具有外键关系的两个模型数据传递给一个html模板

在两个不同组件中具有相同行为的按钮

PrototypeCell内部的UITextView在两个iPhone模拟器中具有不同的行为