字段已填写时ValidationError仍触发,代码问题排查求助
问题分析
你的代码核心问题在于使用了全局的search()方法查询所有系统中expense_account为空的account.pettycash.voucher.wizard.line记录,而非针对当前正在审批的单据关联的明细行做校验。哪怕你当前提交的单据所有明细都已填写,只要系统里存在任何一条未填写expense_account的历史明细,就会触发ValidationError。
修复方案
你需要针对当前审批的单据(即循环中的rec)关联的明细行做校验,假设当前模型与account.pettycash.voucher.wizard.line是通过one2many字段关联(比如字段名为line_ids,请根据实际字段名调整),修改代码如下:
def action_approved(self): for rec in self: # 筛选当前单据下未填写expense_account的明细行 empty_expense_lines = rec.line_ids.filtered(lambda line: not line.expense_account) if empty_expense_lines: raise ValidationError('Fill the expense account!') else: rec.state = 'approved'
如果你的关联字段不是line_ids,替换成实际的字段名即可。这样校验就只会针对当前操作的单据明细,不会被其他无关记录干扰。
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

