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

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

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

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

[分享]关于如何确认哪些模块继承修改过某对象的方法



  • 在继承修改 purchase.order 的 onchange_partner_id 方法时,  出现了 方法参数 个数不匹配的问题.<br />经Joshua 提示 object.class.mro 属性 可以查询到各类的继承关系.<br /><br /><br />方法所属 class 中 可以得到 <br /><br />>>>self.class.mro<br />(<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'>)<br /><br />因此遍历一下, 访问 各 class 是否有 'onchange_partner_id' 方法即可<br /><br />>>>[hasattr(ii, 'onchange_partner_id') and ii for ii in self.class.mro]<br />[<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]<br /><br /><br />由此信息可以得出 warning 模块修改过 purchase.order 的 onchange_partner_id 方法. 所以, 再继承修改一次 warning 中的方法. 修正参数个数. 完成修改.<br />



  • 在继承修改 purchase.order 的 onchange_partner_id 方法时,  出现了 方法参数 个数不匹配的问题.<br />经Joshua 提示 object.class.mro 属性 可以查询到各类的继承关系.<br /><br /><br />方法所属 class 中 可以得到 <br /><br />>>>self.class.mro<br />(<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'>)<br /><br />因此遍历一下, 访问 各 class 是否有 'onchange_partner_id' 方法即可<br /><br />>>>[hasattr(ii, 'onchange_partner_id') and ii for ii in self.class.mro]<br />[<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]<br /><br /><br />由此信息可以得出 warning 模块修改过 purchase.order 的 onchange_partner_id 方法. 所以, 再继承修改一次 warning 中的方法. 修正参数个数. 完成修改.<br />


  • 管理员

    谢谢分享。



  • 恭喜,总监又突破了!



  • >>>self.class.mro<br /><br />~~~~~~~~<br />请教 这是在什么 情形下执行的?<br /><br /><br />总监提示,是在 断点之后执行的,<br />试了一下 在  pycharm 进入断点后,可以  打开 命令行 进行操作<br />见图:<br />[attachimg=1]



  • mark一下,这是我一直都想找的。谢了


  • 管理员

    总监好文,非常实用



  • 相当给力,必须关注



  • 这个就是我以前想要的东西 总监突破了!!! ;D


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待