赞
踩
前面我们介绍了模型的基本继承,在官方文档中称为经典继承。这是最常用的继承方式,最容易
想到的就是 in-place 继承。获取模型并对其继承。添加的新功能会自动添加到已有模型中,而不会创建新模型。可以为_inherit 属性传入多个值来继承多个父模型。大多数情况下这通过 mixin 类完成,mixin 类是实现可复用的通用功能。也可以像普通模型那样独立使用,像是一个功能容器,可随时加到其它模型中。
如在使用_inherit 属性的同时还使用了与父模型不同的_name 属性,此时会复用所继承并创建一个新的模型,并带有自己的数据表和数据。官方文档称其为原型(prototype)继承。下面我们会拿一个模型,并为其创建一个拷贝。在添加新功能时,只会被加到新模型中,而不会变更原模型。此外还有代理(delegation)继承,通过_inherits 属性来使用(注意最后有一个 s)。这允许我们创建一个包含和继承已有模型的新模型。新模型创建新记录时,在原模型中也会被创建并使用many-to-one 字段关联。查看新模型的人可以看到所有原模型和新模型中的字段,但在后台两个模型分别处理各自的数据。下面我们一起来了解详情。
前文我们继承模型时使用了_inherit 属性,创建一个类继承 library.book 并添加了一些功能。类中没有使用_name 属性,不指明即使用 library.book。如果设置了不个不同值的_name 属性,会通过从所继承的模型拷贝功能创建新模型。
在实际开发中,这类继承一般通过抽象 mixin 类,很少这样直接继承普通模型,因为这样会创建冗余的数据结构。 Odoo 还有一种代理继承机制可避免这类数据结构冗余,所以普通模型通常会使用这种方法来做继承。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。