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()
说明
- 在onchange开头清空临时行:
self.budget_investment_request_edit_division_line_ids = False会清除所有未保存的临时记录,避免重复追加。 - 调整临时记录的
is_save状态:设为False确保action_save能正确识别未保存的行,执行写入操作。 - 简化
action_save的写入逻辑:只更新关联ID和保存状态,无需重复写入已存在的字段值。
内容的提问来源于stack exchange,提问作者Huy1LapTrinh
相关产品推荐
相关产品推荐

