[分享]关于 many2one 字段 ondelete 属性的解释
-
OE many2one 字段 ondelete 属性 有五种可选值 ['restrict', 'no action', 'cascade', 'set null', 'set default']
该值解释可以参考 PostgreSQL 中的约束的相关参考. 下面是 成都-左奕<18080010801> 给出的更准确的诠释.. 谢谢...
成都-左奕<18080010801> 17:42:48
RESTRICT 禁止删除被引用的行。NO ACTION 的意思是如果在检查约束的时候还存在任何引用行,则抛出错误;如果你不声明任何东西,那么它就是缺省的行为。这两个选择的实际区别是:NO ACTION 允许约束检查推迟到事务的晚些时候,而 RESTRICT 不行。CASCADE 声明在删除一个被引用的行的时候,所有引用它的行也会被自动删除掉。在外键字段上的动作还有两个选项:SET NULL 和 SET DEFAULT ,它们导致在被引用行删除的时候,将引用它们的字段分别设置为 NULL 和缺省值。请注意这些选项并不能让你逃脱被观察和约束的境地。比如,如果一个动作声明 SET DEFAULT ,但是缺省值并不能满足外键,那么该动作就会失败。
成都-左奕<18080010801> 17:51:00
no action可能是到commit的时候,再检查约束. 就是你可以先删父行,再删字行.. 然后提交的时候不会报错.
restrict 是只要删除父行就马上报错.