在我的 odoo 版本 13 中,我根据官方插件/phone_validation 使用自定义 OCA 模块:
class PhoneValidationMixin(models.AbstractModel):
_inherit = "phone.validation.mixin"
迁移到 v16 后,我想重新安装此模块,但我收到此错误:
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.
标准模型phone.validation.mixin似乎已经从odoo v16中消失了。 请问如何处理?
在这里您可以看到发生了什么以及如何更改代码以匹配手机验证功能的新位置
https://github.com/odoo/odoo/pull/63333/files
总之,手机验证码已移至此文件中
https://github.com/odoo/odoo/blob/16.0/addons/phone_validation/tools/phone_validation.py
你可以这样使用它:
from odoo.addons.phone_validation.tools import phone_validation
...
fmt_number = phone_validation.phone_format(
number, contact_country.code if contact_country else None,
contact_country.phone_code if contact_country else None,
force_format='INTERNATIONAL',
raise_exception=False
)
...
我已经解决了它复制/粘贴 v13 模型:“phone.validation.mixin” OCA - 自定义模块而不是继承它:
class PhoneValidationMixin(models.AbstractModel):
_name = 'phone.validation.mixin'
# _inherit = "phone.validation.mixin"