在实际开发过程中,我们经常遇到这样的场景:修改完代码,进行本地测试,然后通过 CI 推送到线上。然而升级后却发现线上存在一些小冲突,不得不再次回退重来。有经验的开发者都知道,这种反复操作非常耗时。
实际上,我们可以从两个方向进行优化:
1. 使用高效、轻量的 CI 流程
许多公司虽然实现了 CI(持续集成),但一次构建可能耗时 10 多分钟甚至更久。更糟糕的是,构建完成后部署到线上才发现存在冲突,又得重新调整。由于线上数据库庞大,完全同步到本地也不现实。
因此,CI 必须足够轻量——我们不应为了“有 CI”而做 CI,而应以提升效率、减少重复劳动为目标。一个快速反馈的 CI 系统,能显著缩短开发迭代周期。
2. 支持线上动态验证与实时更新
理想情况下,我们希望实现“线上实时更新”,这其实体现了低代码的核心思想。在 Odoo 中,系统本身支持动态添加 JS、CSS、QWeb 模板和视图。
然而,官方功能存在明显局限:
- 视图可以在线添加,但无法指定 xmlid,这是一个硬伤——我们不可能在开发或引用时依赖数据库中的自增 ID。
- 虽然支持动态脚本注入,但功能受限,例如无法实现 onchange 等交互逻辑。
因此,这些部分都需要我们进行扩展和优化。
本次开发将先实现以下三个核心功能:
- 动态添加 CSS
- 动态添加 JS
- 动态添加 XML(视图)
界面设计如下:
菜单只有管理员才有权限,css对应动态添加css, js和assets同理,下边分别举例
动添加CSS
.o_form_sheet {
background-color: red !important
}
注意,bound也需要选择,这样会添到不同的bound中,后端对应的bound为web.assets_web, website为web.assets_frontend。类型无所谓,主要用于分类
动添加JS, 这里我们以patch为例

动添加QWEB
同时,如果添加的代码如果有问题时,我们可以对相关的代码进行屏蔽,屏蔽所有,通过路由上的ignore_dynamic=1进行
如果是屏蔽特定的模块 ignore_dynamic= Formlabel进行,多个名称通过逗号连接。如此,我们便用足够的自由度,
扫二维码进群下载