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

Odoo中如何正确继承自定义模块的Controller控制器?

Odoo12 自定义控制器继承正确实现方案

常见失效原因

你的代码不生效是以下几个问题共同导致的:

  • 文件存放位置不符合Odoo规范:控制器文件必须放在模块的controllers目录下,直接放在模块根目录不会被Odoo扫描加载
  • 导入路径错误:目标控制器在第三方模块moduleWithTheController下,你错误地从自有模块路径导入类
  • 模块依赖未配置:没有声明对原控制器所在模块的依赖,加载顺序错误会导致导入失败
  • 控制器未注册:新建的控制器文件没有在__init__.py中声明,Odoo不会执行对应代码

正确实现步骤

1. 调整文件结构

把你的as_read_controller.py移动到自有模块的controllers目录下,最终结构如下:

odoo12_myCustoms/myActualProject/
├── __init__.py
├── __manifest__.py
└── controllers/
    ├── __init__.py
    └── as_read_controller.py

2. 配置模块依赖

打开自有模块的__manifest__.py,把原控制器所在模块加入依赖列表,保证Odoo先加载原模块再加载你的自定义模块:

# __manifest__.py 片段
'depends': [
    'base',
    'moduleWithTheController', # 新增原模块依赖
],

3. 注册控制器文件

在controllers/__init__.py中导入你写的控制器文件:

# controllers/__init__.py
from . import as_read_controller

4. 编写继承代码

打开as_read_controller.py,修正导入路径和路由配置,参考如下代码:

from odoo import http
# 从原模块对应路径导入目标控制器基类
from moduleWithTheController.controllers.as_controller import as_webservice as BaseWebservice

class ExtendedWebservice(BaseWebservice):
    # 路由路径、auth、type参数必须和原路由完全一致,公共路由建议补充csrf=False避免校验冲突
    @http.route(
        ['/account_fiscal/account', '/account_fiscal/account/<account_id>', '/account_fiscal/account/name/<ai>'],
        auth="public",
        type="http",
        csrf=False,
    )
    def account(self, account_id=None, ai=None, **post):
        # 若需要保留原逻辑,先调用super执行原方法,再新增自定义逻辑
        # base_resp = super().account(account_id=account_id, ai=ai, **post)
        # 自定义逻辑写在这里
        # return base_resp

        # 若需要完全替换原逻辑,直接编写返回逻辑即可
        return "自定义接口返回内容"

5. 生效操作

重启Odoo服务并升级你的自定义模块,让代码生效,执行命令参考:

./odoo-bin -u myActualProject -d 你的业务数据库名

排查要点

如果按上述步骤操作后仍不生效,逐一检查:

  • 原模块的内部导入路径是否正确,部分模块会在controllers/init.py中做别名导出,需要对应调整导入语句
  • 路由参数是否和原路由完全一致,路径、请求类型、鉴权方式不一致会导致路由注册冲突
  • 升级模块时是否指定了正确的数据库,未指定数据库时模块升级不会生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:45:48