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

在Odoo中扩展Pydantic V2模型时遇到的扩展失效问题

解决Odoo 16中extendable-pydantic扩展Pydantic模型失效问题

问题核心

在Odoo模块加载机制下,附加模块定义的ExtendedMainModel未被正确注册到extendable-pydantic的扩展系统,导致主模型MainModel无法合并扩展字段。

解决方案步骤

  • 主模块模型继承ExtendableModel基类
  • 附加模块中定义扩展模型并设置extend=True标记
  • 利用Odoo模块加载钩子触发扩展注册动作

主模块(main_module)代码实现

# main_module/models.py
from extendable_pydantic import ExtendableModel
from pydantic import Field

class MainModel(ExtendableModel):
    field_a: str = Field(description="基础字段A")
    field_b: int = Field(description="基础字段B")

    class Config:
        orm_mode = True

附加模块(module_a)代码实现

# module_a/models.py
from extendable_pydantic import ExtendableModelMeta
from main_module.models import MainModel

class ExtendedMainModel(MainModel, extend=True):
    field_c: float = Field(description="扩展字段C")

def register_extensions():
    """注册扩展模型,需在模块安装后执行"""
    ExtendableModelMeta.register_extended_model(MainModel, ExtendedMainModel)

修改附加模块的__manifest__.py,添加模块初始化钩子:

{
    'name': '附加模块A',
    'depends': ['main_module'],
    'post_init_hook': 'module_a.models.register_extensions',
    # 其他Odoo清单配置项
}

关键说明

  • 扩展模型必须通过extend=True声明,告知extendable-pydantic这是一个扩展类
  • 必须显式调用ExtendableModelMeta.register_extended_model完成注册,Odoo的模块加载机制不会自动触发该动作
  • 使用post_init_hook确保在模块安装完成后执行注册,此时主模型已被正确加载

验证示例

# 仅激活主模块时
obj = MainModel(field_a="demo", field_b=2024)
print(obj.dict())  # 输出: {'field_a': 'demo', 'field_b': 2024}

# 安装附加模块A后
obj = MainModel(field_a="demo", field_b=2024, field_c=3.14)
print(obj.dict())  # 输出: {'field_a': 'demo', 'field_b': 2024, 'field_c': 3.14}

内容的提问来源于stack exchange,提问作者Corwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:22:06