odoo17从2023年10月发布至今基本已过半年,细节基本完善,就我们在官方及中文应用商店的销售情况来看,odoo17的模块下载购买已占据了至少一半,可以新版本已经有了不错的应用,广为客户接受。
我司数百个模块也已有大半升级到了odoo17版,以下我们从开发者角度,总结下从odoo其它版本如16升级17的关键要点,主要包括模块定义,后台.py文件,界面xml文件,前端owl开发等几大方面。业务逻辑变化也比较多,主要集中在电商网站及门店POS等,后续起新文详述。
先给个odoo17模块升级的脑图总结
Manifest文件
- 版本:不再支持4位版本号,精简掉最开头的大版本号,格式只能为`x.y`, `x.y.z`。比如原来为 16.24.03.30,现在要将大版本号去掉,使用 24.03.30
- hook变化,只有一个env参数
def post_init_hook(env)
def pre_init_hook(env)
def uninstall_hook(env)
.py后台python开发文件
- Fields定义:不再支持 states 处理只读与否,一般放到 xml 中处理特殊的只读属性
- name_get: 改为 _compute_display_name
- 模型变更:具体业务模块中比较。核心的如
mail.channel 改为 discuss.channel
.xml界面文件升级,可在rng中查看
- 关键属性: Since 17.0, the "attrs" and "states" attributes are no longer used. 直接使用py表达式 invisible="is_mega_menu != True"
- 设置Block中的中调整:多用app,setting标签
- 不在root级别支持 groups标签,可直接删除,在xml内部fields等定义中处理
- widget提级:widget提级,可以不绑定在field直接使用,比如 tree中直接与数据无关的使用
- tree视图: 增加 open_form_view,可以特殊处理查看详情。可以直接挂载widget,不被field包裹。不可见调整为 column_invisible。
- graph视图:柱图增加处理 cumulated_start
- calendar视图:quick_add 变为 quick_create 且可以通过quick_create_view_id指定视图
- pivot视图:无变化
- search视图:无变化
.js前端升级owl2
详情参考 官方文档 https://www.odoo.com/documentation/17.0/developer/reference/frontend/framework_overview.html
细节较多,可参考官方市场 app_web_widget_ztree 模块,基本全面应用新 js 规范
https://apps.odoo.com/apps/modules/17.0/app_web_widget_ztree/
- web端全面使用owl2,es规范
- website端可使用旧snippets,同时可以使用owl
- 取消registerPatch,统一用类的 patch处理。如: patch(类.prototype, {xxx})
- patch原类无需给新命名,但要自行处理相关依赖级别