Odoo 12版本Date/Datetime字段Onchange函数重复触发异常问题
Odoo 12 Date字段Onchange函数异常触发问题
嘿,这个Odoo 12里Date字段的onchange坑我之前踩过!给你整理下问题细节和临时解决办法:
关键信息
- 影响版本: Odoo 12
- 对比表现: Char字段的Onchange函数仅在字段值与上次值不同时执行(符合预期),但Date字段却存在异常
问题复现步骤
- 给Date字段绑定一个包含抛出
ValidationError或UserError逻辑的Onchange函数 - 触发错误后(比如示例中选择了当天日期),再次点击该Date字段准备修改,此时未修改字段值,Onchange函数就会持续执行,错误弹窗反复弹出,完全没法正常修改日期
示例代码
from odoo import models, api, fields from odoo.exceptions import ValidationError import datetime class CustomModel(models.Model): _name = 'custom.model' today_date = fields.Date(string='Target Date') @api.onchange('today_date') def change_date(self): if self.today_date == datetime.datetime.today().date(): raise ValidationError("Selected today's Date >>>>>>>>>>>>>>")
场景说明:当选择当天日期触发错误弹窗后,点击字段想修改为其他日期,还没完成选择操作,错误弹窗就会不停弹出。这个问题仅存在于Odoo 12,Odoo 13和14版本已经修复了这个bug。
临时解决方案
既然问题根源是Date字段在点击编辑时(未修改值)就重复触发Onchange,我们可以手动在函数里添加值变化判断,模拟Char字段的正常逻辑:
@api.onchange('today_date') def change_date(self): # 获取字段的原始值(通过self._origin拿到未修改前的记录数据) original_date = self._origin.today_date # 仅当当前值与原始值不同时,才执行校验逻辑 if self.today_date != original_date: if self.today_date == datetime.datetime.today().date(): raise ValidationError("Selected today's Date >>>>>>>>>>>>>>")
这样就能确保只有当用户真正修改了Date字段的值时,才会执行Onchange里的校验逻辑,避免无意义的错误弹窗反复出现。
内容的提问来源于stack exchange,提问作者Satya Dev Yadav
相关产品推荐
相关产品推荐

