You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:18:19