[分享]关于如何确认哪些模块继承修改过某对象的方法
-
在继承修改 purchase.order 的 onchange_partner_id 方法时, 出现了 方法参数 个数不匹配的问题.
经Joshua 提示 object.class.mro 属性 可以查询到各类的继承关系.
方法所属 class 中 可以得到
>>>self.class.mro
(<class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.purchase_analytic_plans.purchase_analytic_plans.purchase_order'>, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.warning.warning.purchase_order'>, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.purchase.edi.purchase_order.purchase_order'>, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.purchase.purchase.purchase_order'>, <class 'openerp.osv.orm.Model'>, <class 'openerp.addons.mail.mail_thread.mail_thread'>, <class 'openerp.addons.base.ir.ir_needaction.ir_needaction_mixin'>, <class 'openerp.osv.orm.AbstractModel'>, <class 'openerp.osv.orm.BaseModel'>, <class 'openerp.addons.edi.models.edi.EDIMixin'>, <type 'object'>)
因此遍历一下, 访问 各 class 是否有 'onchange_partner_id' 方法即可
>>>[hasattr(ii, 'onchange_partner_id') and ii for ii in self.class.mro]
[<class 'openerp.osv.orm.purchase.order'>, False, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.warning.warning.purchase_order'>, <class 'openerp.osv.orm.purchase.order'>, False, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.osv.orm.purchase.order'>, <class 'openerp.addons.purchase.purchase.purchase_order'>, False, False, False, False, False, False, False]
由此信息可以得出 warning 模块修改过 purchase.order 的 onchange_partner_id 方法. 所以, 再继承修改一次 warning 中的方法. 修正参数个数. 完成修改. -
mark一下,这是我一直都想找的。谢了
-
总监好文,非常实用
-
相当给力,必须关注