如何在Odoo中使用正则表达式对整数字段进行校验?
Odoo整数字段校验不生效问题修复方案
问题根因
- 字段类型与校验逻辑不兼容:你定义的
x_extra_knives_sub是Integer整数字段,Odoo原生会自动校验输入内容是否为合法整数,非数字输入在触发你自定义的@api.constrains逻辑之前就会被字段类型校验拦截,同时正则匹配方法re.match仅支持字符串类型入参,传入整数会导致判断逻辑永远无法触发报错分支。 - 依赖导入缺失:如果代码头部没有导入
ValidationError、api等必要依赖,也会导致校验逻辑不生效甚至直接报错。
优化方案
整数字段无需使用正则做数字格式校验,直接判断数值范围即可,比如限制必须输入正整数的修正代码如下:
from odoo import models, fields, api from odoo.exceptions import ValidationError class ExtraKnivesSub(models.Model): _name = 'extra.knives.sub' _description = 'Extra Knives Sub' x_extra_knives_sub = fields.Integer('刀具数量', required=True) x_upcharge_sub = fields.Float('附加费用', digits='EF Price') x_extraknives_m = fields.Many2one('extra.knives') @api.constrains('x_extra_knives_sub') def _check_number(self): for rec in self: # 可根据业务需求调整数值判断条件 if rec.x_extra_knives_sub <= 0: raise ValidationError(_('额外刀具数量仅允许输入正整数'))
生效注意事项
修改代码后需要升级对应的Odoo模块、重启服务,校验规则才会正式生效。
内容的提问来源于stack exchange,提问作者Shravy
相关产品推荐
相关产品推荐

