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

Odoo 14:onchange清除关联记录无法删除数据库条目问题

Odoo 14表单视图切换选项时无法清除关联数据库记录问题

问题分析

你遇到的核心问题有两个:

  1. onchange方法的特性限制:Odoo的onchange仅处理表单内存中的临时数据变更,不会直接同步到数据库,必须点击「保存」按钮才会将所有变更持久化。
  2. 模型字段冲突:当前模型继承自roke.routing,却又定义了同名的routing_id字段,这会导致One2many关联关系混乱,进而影响记录删除逻辑。

解决方案

1. 优先修正字段冲突

删除当前模型中重复定义的routing_id字段:

# 移除这一行重复定义的字段
# routing_id = fields.Many2one("roke.routing", string="工艺路线")

如果确实需要新增关联roke.routing的字段,改为其他名称(比如related_routing_id),并同步修改onchange方法中的触发字段。

2. 优化onchange逻辑

无需单独执行清空操作,直接用新数据替换临时记录即可:

@api.onchange('routing_id')  # 若字段名修改,此处同步更新
def onchange_routing_id(self):
    if self.routing_id:
        data_list = []
        for line in self.routing_id.line_ids:
            data_list.append((0, 0, {
                'process_id': line.process_id.id,
                'working_hours_minute': line.working_hours_minute,
                'prepare_working_hours': line.prepare_working_hours,
                'note': line.note,
            }))
        self.routing_line_ids = data_list
    else:
        self.routing_line_ids = [(5, 0, 0)]

3. 实时删除数据库记录(可选)

如果必须在切换选项时立即删除数据库中的关联记录(不依赖保存),可以在onchange中结合unlink操作(仅针对已保存的记录):

@api.onchange('routing_id')
def onchange_routing_id(self):
    # 仅当记录已保存到数据库时,删除关联记录
    if self.id:
        self.routing_line_ids.unlink()
    
    # 更新表单临时数据
    if self.routing_id:
        data_list = []
        for line in self.routing_id.line_ids:
            data_list.append((0, 0, {
                'process_id': line.process_id.id,
                'working_hours_minute': line.working_hours_minute,
                'prepare_working_hours': line.prepare_working_hours,
                'note': line.note,
            }))
        self.routing_line_ids = data_list
    else:
        self.routing_line_ids = [(5, 0, 0)]

验证步骤

  1. 修正代码后,重启Odoo服务并升级对应模块
  2. 打开表单视图切换routing_id,确认表单内的routing_line_ids正确更新
  3. 点击保存,检查数据库中roke.routing.line表的关联记录是否被正确删除/新增

内容的提问来源于stack exchange,提问作者wenlin Fe3O4 x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:43:17