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

Odoo创建第二条记录时第一条记录重复的问题求助

问题根源与解决方案

问题原因

重复记录的核心问题出在你的_onchange_budget_investment_id方法中:每次触发budget_investment_id字段变更时,你没有清空已存在的临时行记录,而是直接向budget_investment_request_edit_division_line_ids追加新行。这导致第二次创建记录时,之前的临时行仍保留在视图中,再加上新查询到的行,就出现了重复项。

另外,onchange中直接将临时记录的is_save设为True也不合理——临时记录尚未保存到数据库,is_save应该标记为未保存状态,否则action_save会跳过这些行的处理。

修改后的代码

修正onchange方法

@api.onchange('budget_investment_id')
def _onchange_budget_investment_id(self):
    # 先清空现有临时行,避免重复追加
    self.budget_investment_request_edit_division_line_ids = False
    if self.budget_investment_id:
        line_ids = self.env['hmv.budget.investment.division.request.edit.line'].search([
            ('budget_investment_id', '=', self.budget_investment_id.id)
        ])
        for line in line_ids:
            self.budget_investment_request_edit_division_line_ids += self.budget_investment_request_edit_division_line_ids.new({
                'budget_investment_id': line.budget_investment_id.id,
                'department_id': line.department_id.id,
                'request_content': line.request_content,
                'is_save': False  # 临时记录未保存,设置为False
            })

简化action_save方法

def action_save(self):
    for line in self.budget_investment_request_edit_division_line_ids:
        if not line.is_save:
            # 仅更新必要字段,其他字段已在临时记录中存在
            line.write({
                'budget_investment_request_edit_division_id': self.id,
                'is_save': True
            })
    # 刷新当前记录,确保视图同步更新
    self.refresh()

说明

  1. 在onchange开头清空临时行:self.budget_investment_request_edit_division_line_ids = False会清除所有未保存的临时记录,避免重复追加。
  2. 调整临时记录的is_save状态:设为False确保action_save能正确识别未保存的行,执行写入操作。
  3. 简化action_save的写入逻辑:只更新关联ID和保存状态,无需重复写入已存在的字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:22:33