如何获取Odoo模型的原始定义模块?
解答
这是预期行为吗?
是的,这是Odoo的正常行为。_module属性实际记录的是最后一个对该模型进行继承扩展或修改的模块,而非模型最初定义的模块。当snailmail_account_followup模块继承并修改了res.partner后,_module就会被覆盖为这个模块的名称,完全符合Odoo动态模型继承的机制。
获取原始定义模块的正确方法
要拿到模型最初定义的模块,最可靠的方式是查询存储模型元数据的ir.model表,其中的module字段保存了模型原始定义所在的模块:
env['ir.model'].search([('model', '=', 'res.partner')]).module
执行后会返回base,也就是res.partner的原始定义模块。
如果不想查数据库,也可以尝试查看模型的_inherit属性,但这种方法在模型被多层继承时容易出错,所以优先推荐ir.model的查询方式。
内容的提问来源于stack exchange,提问作者Seaworn
相关产品推荐
相关产品推荐

