Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

[分享]关于 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 是只要删除父行就马上报错.



  • 今天发现,只有 required=True 的时候ondelete才会生效


Log in to reply