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

Odoo 14升级至16后web.frontend_layout重复视图处理问题

解决Odoo 16中web.frontend_layout重复视图无法删除的问题

你遇到的核心问题是陈旧视图被其他继承视图依赖,直接删除触发外键约束,归档又导致站点崩溃。以下是可行的解决步骤:

1. 先修复依赖的继承视图

因为报错提示ir_ui_view_inherit_id_fkey约束,说明有其他视图继承了这个无外部ID的陈旧视图。你需要先把这些继承关系转移到正确的视图上:

  • 开启开发者模式,进入设置 > 技术 > 用户界面 > 视图
  • 搜索inherit_id字段等于陈旧视图的ID(可从视图列表的URL或表单页获取ID,比如截图里的陈旧视图ID)
  • 把所有搜索到的继承视图的inherit_id改成带外部IDweb.frontend_layout的正确视图ID

2. 通过Odoo Shell删除陈旧视图

如果后台操作不方便,用Odoo Shell更高效:

  • 启动Shell(替换成你的数据库名):
    ./odoo-bin shell -d your_database_name
    
  • 执行以下代码(根据实际情况调整视图名称或搜索条件):
    # 获取正确的视图
    correct_view = env['ir.ui.view'].search([('external_id', '=', 'web.frontend_layout')])
    # 获取陈旧视图(如果名称不对,换成你看到的陈旧视图名称)
    stale_view = env['ir.ui.view'].search([('name', '=', 'frontend layout'), ('external_id', '=', False)])
    
    # 转移所有继承关系
    env['ir.ui.view'].search([('inherit_id', '=', stale_view.id)]).write({'inherit_id': correct_view.id})
    
    # 删除陈旧视图
    stale_view.unlink()
    
  • 退出Shell后重启Odoo服务

3. 直接数据库操作(需备份)

如果以上方法都不行,直接操作PostgreSQL数据库(务必先备份数据库):

  • 登录数据库:
    psql -d your_database_name
    
  • 查询陈旧视图ID:
    SELECT id FROM ir_ui_view WHERE name = 'frontend layout' AND external_id IS NULL;
    
  • 查询依赖它的继承视图:
    SELECT id, name FROM ir_ui_view WHERE inherit_id = '陈旧视图ID';
    
  • 转移继承关系(替换成正确视图的ID):
    UPDATE ir_ui_view SET inherit_id = '正确视图ID' WHERE inherit_id = '陈旧视图ID';
    
  • 删除陈旧视图:
    DELETE FROM ir_ui_view WHERE id = '陈旧视图ID';
    
  • 退出psql后重启Odoo服务

注意事项

  • 操作前一定要备份数据库,避免数据丢失
  • 修改完成后必须重启Odoo,清除系统缓存
  • 若不确定视图ID,可在开发者模式下打开视图表单,从URL中提取(比如#id=123&model=ir.ui.view中的123就是ID)

内容的提问来源于stack exchange,提问作者Anthony Taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:03:09