据我所知,odoo并不像Python扩展其类(_inherit = 'model'
)那样扩展其模型。这似乎很合理。我的问题是:
如果我的customModule1
扩展了sale.order
并重写了write
方法,添加了一些功能,然后我安装了customModule2
,它反过来扩展了sale.order
模型,并覆盖了添加了一些功能的write
方法的所有版本,那么我知道将调用{
当客户机在sale.order
模型上写操作时,customModule1
的write
会首先被调用吗?还是write
的customModule2
?在
是的,这是非常有趣的一点,没有人能够预测哪个模块首先调用哪个方法,因为odoo管理依赖的层次结构。在
因此,在您的例子中,自定义模块1和自定义模块2将处于同一级别,并且都具有相同的父级销售订单。在
销售订单=>自定义模块1(写入方法重写)
销售订单=>自定义模块2(写入方法重写)
在这种情况下,假设write方法从模块1调用,那么它可能会忽略模块2的write方法,因为模块1和模块2位于同一级别(super称为父类的write方法)。因为我们在开发过程中多次遇到这样的问题:在多个模块上重写的方法,并且这些方法在同一级别上,那么它将不会调用下一个模块的方法。在
所以,当您需要调用每个模块的每个方法时,它们必须在层次结构中,但不能在同一级别上。在
因为有一个主要的原因是,对于并行模块,这个方法有时不会被调用。在
因为这里有两件事
(一)。依赖于:父模块(决定模块层次结构)
(二)。继承:这里定义了对象的方法和行为。在
customModule2
的write
将首先调用(因为它是最后安装的),如果您在write中调用了super,那么将根据super position调用customModule1的write。在或者
^{pr2}$相关问题 更多 >
编程相关推荐