Odoo15迁移至Odoo16自定义hr视图更新后仍报错求助
Odoo16视图迁移RPC_ERROR:旧XPath未清除问题解决
问题原因
- 视图缓存未彻底刷新:Odoo会缓存视图的继承链与解析结构,即便XML中的XPath已更新,服务器缓存仍可能保留旧的视图解析结果。
- 直接删记录操作不彻底:仅删除
ir_ui_view记录,但ir_model_data关联条目未同步清理,或模块更新时重新创建视图后,旧继承规则仍残留在视图arch字段中。 - 视图历史版本残留:Odoo通过
ir_ui_view_history表保存视图历史版本,这些旧版本可能仍包含旧XPath引用,在特定场景下被加载。
解决步骤
1. 强制更新模块并同步视图定义
优先使用Odoo官方更新流程强制覆盖旧配置,避免直接删库操作:
./odoo-bin -d etn_db -u custom_etn_module --force
--force参数会强制重新加载所有视图定义,覆盖缓存中的旧数据。
2. 检查并修复视图arch字段
登录数据库,确认自定义视图的arch字段是否残留旧XPath:
SELECT arch FROM ir_ui_view WHERE id = (SELECT res_id FROM ir_model_data WHERE model = 'ir.ui.view' AND name = 'custom_hr_view_employee_form' AND module = 'custom_etn_module');
若发现旧XPath仍存在,手动更新该字段为XML中正确的视图内容:
UPDATE ir_ui_view SET arch = '<替换为你XML文件中正确的视图XML代码>' WHERE id = (SELECT res_id FROM ir_model_data WHERE model = 'ir.ui.view' AND name = 'custom_hr_view_employee_form' AND module = 'custom_etn_module');
3. 清空缓存并重启服务
- 后台进入设置 > 技术 > 缓存管理,点击「清空缓存」。
- 重启Odoo服务彻底清除内存缓存:
# 若用systemd管理服务 systemctl restart odoo # 或直接重启进程 pkill -f odoo-bin ./odoo-bin -d etn_db
4. 清理视图历史版本(可选)
若上述步骤无效,清理视图历史记录:
DELETE FROM ir_ui_view_history WHERE view_id = (SELECT res_id FROM ir_model_data WHERE model = 'ir.ui.view' AND name = 'custom_hr_view_employee_form' AND module = 'custom_etn_module');
5. 重装模块(终极方案)
若所有方法失效,先备份数据库,再禁用并重装模块:
./odoo-bin -d etn_db -u custom_etn_module --uninstall ./odoo-bin -d etn_db -i custom_etn_module
内容的提问来源于stack exchange,提问作者VBox microsoft
相关产品推荐
相关产品推荐

