在使用 upgrade.odoo.com 成功执行数据库升级(v13e-DB-backup 到 v16e-DB)并将 v16-DB 导入到我在 odoo.sh 的暂存分支上之后:
当我连接到这个 odoo16e-Staging-branch(“neutralized”)并尝试在 Apps 中重新安装我的自定义模块(扩展 website_event)时,我收到了这个错误:
AssertionError: Field event.event.state without selection
RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/http.py", line 1583, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/home/odoo/src/odoo/odoo/service/model.py", line 134, in retrying
result = func()
File "/home/odoo/src/odoo/odoo/http.py", line 1610, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/src/odoo/odoo/http.py", line 1807, 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 696, 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 76, in check_and_log
return method(self, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/addons/base/models/ir_module.py", line 491, 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 615, 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 487, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/home/odoo/src/odoo/odoo/modules/loading.py", line 371, in load_marked_modules
loaded, processed = load_module_graph(
File "/home/odoo/src/odoo/odoo/modules/loading.py", line 206, in load_module_graph
registry.setup_models(cr)
File "/home/odoo/src/odoo/odoo/modules/registry.py", line 297, in setup_models
model._setup_fields()
File "/home/odoo/src/odoo/odoo/models.py", line 2803, in _setup_fields
field.setup(self)
File "/home/odoo/src/odoo/odoo/fields.py", line 538, in setup
self.setup_nonrelated(model)
File "/home/odoo/src/odoo/odoo/fields.py", line 2543, in setup_nonrelated
assert self.selection is not None, "Field %s without selection" % self
AssertionError: Field event.event.state without selection
The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPCError@https://samadeva-oerp-brstaging-8109207.dev.odoo.com/web/assets/83758-b7a4b7b/web.assets_backend.min.js:973:274
makeErrorFromResponse@https://samadeva-oerp-brstaging-8109207.dev.odoo.com/web/assets/83758-b7a4b7b/web.assets_backend.min.js:977:163
jsonrpc/promise</<@https://samadeva-oerp-brstaging-8109207.dev.odoo.com/web/assets/83758-b7a4b7b/web.assets_backend.min.js:985:34
我注意到原来的模块 event.event 有一些变化(https://github.com/OCA/OpenUpgrade/blob/14.0/openupgrade_scripts/scripts/event/14.0.1.3/post-migration.py) SelectionFields event.event.state 已变成 Many2One-Field:event.event.stage_id
def map_event_event_states_to_stages(env):
def _map_state_to_stage(state, stage_xmlid):
query = """
UPDATE event_event event SET stage_id = imd.res_id
FROM ir_model_data imd
WHERE imd.module = 'event' AND imd.name = %s AND event.state = %s"""
openupgrade.logged_query(env.cr, query, (stage_xmlid, state))
_map_state_to_stage("draft", "event_stage_new")
_map_state_to_stage("done", "event_stage_done")
_map_state_to_stage("cancel", "event_stage_cancelled")
_map_state_to_stage("confirm", "event_stage_announced")
但是,即使在使用另一个新的自定义模块重新安装旧的 fieldSelection 之后,我也无法修复此错误:
class EventEvent(models.Model):
_inherit = 'event.event'
# TRY to fix error on install webtkev on v16: /odoo/fields.py", line 2543, in setup_nonrelated: AssertionError: Field event.event.state without selection
state = fields.Selection([
('draft', 'Unconfirmed'), ('cancel', 'Cancelled'),
('confirm', 'Confirmed'), ('done', 'Done')],
string='Status', default='draft', readonly=True, required=True, copy=False)
知道如何解决它吗?