odoo17 常见升级问题

通用问题

模型名变更

字段变更

方法名变更

方法参数变更

xml数据结构定义变化

xml的id变更

view视图变化,导致xpath路径出差

template结构变化,,导致xpath路径出差,或者id不存在

升16问题

前端owl的架构变化

升17问题

前端

标签弃置、改动:

attrs弃置

attrs="{'invisible': ['|', '&', ('is_company','=', True),('parent_id', '=', False),('company_name', '!=', False),('company_name', '!=', '')]}"

可变为

invisible="((is_company and not parent_id) or company_name) and company_name != ''"

【原attrs内的'='在新逻辑里为==:'a','=','123' a=='123'】

states弃置

states="pending,error"

可变为

invisible="state not in ['pending','error'] "

<attribute>标签改动

<attribute name="attrs">{'invisible': [('is_system', '=', False)]}</attribute>

可变为

<attribute name="invisible">not is_system</attribute>

res.partner模块删除gender性别字段

stock库存模块有问题,安装之后有时候打开设置会报错

运行当中会莫名报错NameError: name 'GEOIP_EMPTY_COUNTRY' is not defined

mail.template 去掉了字段report_template,report_name

看板视图取消了quick_add属性

web/views/graph/colors.js 改到了web/core/colors/colors.js

ir.ui.view模型取消了field_parent字段

odoo.exceptions 去掉了Warning异常处理

模版 id="portal_layout"中去掉了<div class="o_portal_my_security mt-3">这个div

原div<div class="row justify-content-between mt-4">下的布局移动到了 模版id="side_content

"下面

<button icon="fa-code">按钮需加入title以及class="oe_stat_button" 否则日志会报提醒

<button icon="fa-code" type="object" title="导出 xml 源" class="oe_stat_button" name="export_xml_source" />

设置 res_config_settings_view_form试图 新增设置视图逻辑变更

(源码搜索 ref="base.res_config_settings_view_form" 可查看新设置视图逻辑)

例:

<div class="..." data-string="Anodoo Develop" string="Anodoo Develop" >

<div id="develop_setting">

<h2>开发设置</h2>

<div class="row mt16 o_settings_container">

<div class="col-12 col-lg-6 o_setting_box" id="default_is_replace" title=" 默认是否替换开发目录">

...........

</div>

</div>

</div>

</div>

变为

<app data-string="Anodoo Develop" string="开发设置" name="Anodoo" groups="base.group_system" >

<block title="开发设置" name="develop_setting">

<setting string="默认是否替换开发目录" help="默认是否替换开发目录" id="default_is_replace">

..........

</setting>

</block>

</app>

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

详情参考 官方文档 Framework Overview --- Odoo 17.0 documentation

细节较多,可参考官方市场 app_web_widget_ztree 模块,基本全面应用新 js 规范

Many2One Hierarchy Parent Child M2o Selector, zTree 树状下拉选择器 | Odoo Apps Store

  • web端全面使用owl2,es规范
  • website端可使用旧snippets,同时可以使用owl
  • 取消registerPatch,统一用类的 patch处理。如: patch(类.prototype, {xxx})
  • patch原类无需给新命名,但要自行处理相关依赖级别

Odoo Attrs 替代品

由于 Odoo 在 v17 中将 attrs 更改为(不再有 attrs),我创建了这个小脚本来帮助您直接将 XML 文件中的所有 attrs 替换为 XML 中的相应属性。

依赖关系

只需安装

复制代码
pip install beautifulsoup4 lxml

或者

复制代码
pip install -r requirements.txt

用法

启动Python脚本

复制代码
python3 replace_attrs.py

它会询问您根目录以检查XML文件。您可以给出项目的绝对路径。

如果没有给出参数,它将使用当前目录。

对于每个文件,脚本将询问您是否要将所有attrs=and替换为标签中states=的相关attrs(invisible,readonly,required,column_invisible) - (不可见串联或创建)(对于每个标签的所有实例)。states

除非您在开头选择"y"进行自动替换(不要询问每个文件)

相关推荐
Odoo老杨2 天前
Odoo :免费且开源的农牧行业ERP管理系统
odoo·数字化转型·erp·企业信息化·农牧行业
Dear.爬虫2 天前
Odoo中,要实现实时数据推送,SSE 与 WebSocket 该如何选择
websocket·网络协议·sse·odoo·实时数据推送
Mr.E56 天前
odoo 17 后端路由接口认证自定义
odoo·odoo17·odoo后端
向上的车轮6 天前
ODOO学习笔记(7):模块化架构(按需安装)
笔记·python·学习·架构·odoo
Odoo老杨7 天前
Odoo :一款免费开源的日化行业ERP管理系统
odoo·数字化转型·erp·企业信息化·日化行业管理系统·日化行业解决方案
Mr.E59 天前
odoo17 owl 前端 顶部导航栏右侧添加自定义按钮
前端·odoo·odoo17·owl
Sapphire~9 天前
odoo-040 odoo17前端的js方法调用后端py方法action报错
前端·javascript·odoo
Odoo老杨10 天前
Odoo:免费开源的流程制造行业ERP管理系统
odoo·数字化转型·erp·企业信息化·流程制造行业·化工生产行业
向上的车轮12 天前
ODOO学习笔记(2):核心功能是哪些?
笔记·学习·odoo
向上的车轮13 天前
ODOO学习笔记(4):Odoo与SAP的主要区别是什么?
笔记·学习·sap·odoo