Odoo技术问题:如何继承未定义_name的原生继承类创建新类C
如何定义继承自未指定
_name的Odoo原生类B的类C? 问题场景
现有类A与类B,其中类B继承自类A,且类B为Odoo原生代码,未指定_name属性,也无法对其进行修改。现需创建类C并继承自类B,该如何定义?
现有代码示例
from odoo import models class A(models.Model): _name = "a" # 类B为Odoo原生代码,无法修改 class B(models.Model): _inherit = "a" # 原生扩展逻辑
解决方案
在Odoo的模型继承机制中,仅设置_inherit而不指定_name的类属于模型扩展(原型继承),不会创建新模型,而是直接修改_inherit指向的原模型(此处为a)。类B本质上是对模型a的扩展,并没有独立的模型标识,因此定义类C时只需继承原模型a,即可自动包含类A和类B的所有逻辑。
类C的定义方式
方式一:直接继承模型a(推荐)
class C(models.Model): _inherit = "a" # 自定义字段、方法等扩展逻辑
这种写法会让类C自动继承类A的基础定义,以及类B对模型a的所有扩展内容,符合Odoo的原生继承逻辑。
方式二:明确指定继承类B(可选)
如果需要强调继承类B的逻辑(或确保模块加载顺序),可以在_inherit中同时指定模型名和类B的引用:
class C(models.Model): _inherit = ["a", B] # 自定义扩展逻辑
这种写法效果与方式一一致,但通常方式一已满足需求。
内容的提问来源于stack exchange,提问作者redpill
相关产品推荐
相关产品推荐

