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

字段已填写时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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:55:23