Odoo 13迁16后自定义模块因phone_validation模型缺失报错求助
解决Odoo 16中
phone.validation.mixin不存在的迁移问题 问题背景
在Odoo 13中,自定义模块通过继承官方phone_validation模块的phone.validation.mixin实现手机号验证逻辑,代码如下:
from odoo import models class PhoneValidationMixin(models.AbstractModel): _inherit = "phone.validation.mixin"
迁移至Odoo 16后,安装模块时触发TypeError: Model 'phone.validation.mixin' does not exist in registry.错误,原因是官方phone_validation模块已移除该抽象模型。
报错信息
Odoo Server Error Traceback (most recent call last): File "/home/odoo/src/odoo/odoo/http.py", line 1584, in _serve_db return service_model.retrying(self._serve_ir_http, self.env) File "/home/odoo/src/odoo/odoo/service/model.py", line 133, in retrying result = func() File "/home/odoo/src/odoo/odoo/http.py", line 1611, in _serve_ir_http response = self.dispatcher.dispatch(rule.endpoint, args) File "/home/odoo/src/odoo/odoo/http.py", line 1815, in dispatch result = self.request.registry['ir.http']._dispatch(endpoint) File "/home/odoo/src/odoo/addons/website/models/ir_http.py", line 235, in _dispatch response = super()._dispatch(endpoint) File "/home/odoo/src/odoo/odoo/addons/base/models/ir_http.py", line 154, in _dispatch result = endpoint(**request.params) File "/home/odoo/src/odoo/odoo/http.py", line 697, in route_wrapper result = endpoint(self, *args, **params_ok) File "/home/odoo/src/odoo/addons/web/controllers/dataset.py", line 46, in call_button action = self._call_kw(model, method, args, kwargs) File "/home/odoo/src/odoo/addons/web/controllers/dataset.py", line 33, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/home/odoo/src/odoo/odoo/api.py", line 461, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "/home/odoo/src/odoo/odoo/api.py", line 448, in _call_kw_multi result = method(recs, *args, **kwargs) File "<decorator-gen-74>", line 2, in button_immediate_install File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log return method(self, *args, **kwargs) File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py", line 456, in button_immediate_install return self._button_immediate_function(type(self).button_install) File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py", line 580, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "<decorator-gen-14>", line 2, in new File "/home/odoo/src/odoo/odoo/tools/func.py", line 87, in locked return func(inst, *args, **kwargs) File "/home/odoo/src/odoo/odoo/modules/registry.py", line 90, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "/home/odoo/src/odoo/odoo/modules/loading.py", line 488, in load_modules processed_modules += load_marked_modules(cr, graph, File "/home/odoo/src/odoo/odoo/modules/loading.py", line 372, in load_marked_modules loaded, processed = load_module_graph( File "/home/odoo/src/odoo/odoo/modules/loading.py", line 197, in load_module_graph model_names = registry.load(cr, package) File "/home/odoo/src/odoo/odoo/modules/registry.py", line 247, in load model = cls._build_model(self, cr) File "/home/odoo/src/odoo/odoo/models.py", line 615, in _build_model raise TypeError("Model %r does not exist in registry." % name) TypeError: Model 'phone.validation.mixin' does not exist in registry.
解决方案
方案1:改用OCA维护的phone_validation模块
OCA的server-ux仓库中维护了phone_validation模块,该模块在Odoo 16中保留了phone.validation.mixin抽象模型:
- 安装OCA版本的
phone_validation模块(替换官方同名模块) - 保持原有继承代码不变,确保自定义模块的
__manifest__.py中依赖phone_validation
方案2:使用Odoo 16官方替代方案
官方在Odoo 16中将原mixin的功能拆分重构,可选择以下两种方式适配:
- 继承官方新mixin:官方提供
phone.normalizer.mixin作为替代,修改继承代码:
from odoo import models class PhoneValidationMixin(models.AbstractModel): _inherit = "phone.normalizer.mixin"
注意:新mixin的方法名与原mixin有差异(如原_phone_format改为_phone_normalize),需适配业务代码中的方法调用。
- 直接调用工具函数:如果仅需手机号格式化/验证逻辑,可直接导入官方工具函数:
from odoo.addons.phone_validation.tools import phone_validation # 在需要的方法中调用 formatted_phone = phone_validation.phone_format( number=phone_number, country_code=country_code, country_id=country_id, raise_exception=False )
内容的提问来源于stack exchange,提问作者Ahrimann Steiner
相关产品推荐
相关产品推荐

