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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:06:10