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

Odoo自定义模块安装报错:ValueError: too many values to unpack (expected 2)

自定义Odoo模块安装报错解决

错误日志

RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1584, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 133, in retrying
result = func()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1611, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 1815, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 697, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 46, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/dataset.py", line 33, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/usr/lib/python3/dist-packages/odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/usr/lib/python3/dist-packages/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 "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
return method(self, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 468, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 592, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "<decorator-gen-14>", line 2, in new
File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 488, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 372, in load_marked_modules
loaded, processed = load_module_graph(
File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 208, in load_module_graph
registry.init_models(cr, model_names, {'module': package.name}, new_install)
File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 531, in init_models
env['ir.model.fields.selection']._reflect_selections(model_names)
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1287, in _reflect_selections
expected = {
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1291, in <dictcomp>
for index, (value, label) in enumerate(field.selection)
ValueError: too many values to unpack (expected 2)

The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
RPCError@http://localhost:8069/web/assets/192-39f72eb/web.assets_backend.min.js:981:274
makeErrorFromResponse@http://localhost:8069/web/assets/192-39f72eb/web.assets_backend.min.js:985:163
jsonrpc/promise</<@http://localhost:8069/web/assets/192-39f72eb/web.assets_backend.min.js:993:34

模块models.py代码

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class restaurante(models.Model):
    _name = 'trabajo_modulo.restaurante'
    _description = 'Define el restaurante'

    nombre = fields.Char('Nombre', required=True)
    nMesas = fields.Integer(string='Número de mesas', required=True)

class mesa(models.Model):
    _name = 'trabajo_modulo.mesa'
    _description = 'Define la mesa'

    num = fields.Integer(string='Número', required = True)
    capacidad = fields.Integer(string='Capacidad', default=4)

class empleado(models.Model):
    _name = 'trabajo_modulo.empleado'
    _description = 'Permite definir las características de un empleado'

    nombre = fields.Char('Nombre', required=True)
    nif = fields.Char('NIF', required=True)
    puesto = fields.Selection(string='Puesto', selection=[('w','Camarero'), ('c','Cocinero'), ('p', 'Repostero')], default='w')
    sueldo = fields.Float(string='Sueldo')
    fecha_incorporacion = fields.Date(string='Fecha de incorporación')
    experiencia = fields.Integer('Experiencia', compute='_get_antiguedad')

    @api.depends('fecha_incorporacion')
    def _get_antiguedad(self):
        for empleado in self:
            empleado.experiencia = 0

问题分析与解决

报错核心是ValueError: too many values to unpack (expected 2),说明Odoo在处理下拉选择字段(Selection)时,发现某个选项的元素数量不是预期的二元组(值+标签)。

排查与解决步骤:

  1. 检查当前代码的Selection字段:你的puesto字段格式完全正确,每个选项都是('值', '标签')的二元组,注释该字段后仍报错,说明问题不在当前代码的字段定义里。
  2. 清理数据库残留记录:大概率是之前安装模块时,数据库中已经存储了错误的选择字段记录,即使修改了代码,Odoo更新时仍会读取旧数据。可以通过以下方式清理:
    • 若能登录Odoo后台,先卸载该模块,重启服务后再重新安装。
    • 若无法登录后台,直接执行SQL语句清理相关记录(需替换为你的数据库名):
      DELETE FROM ir_model_fields_selection WHERE model LIKE 'trabajo_modulo.%';
      DELETE FROM ir_model_fields WHERE model LIKE 'trabajo_modulo.%';
      DELETE FROM ir_model WHERE model LIKE 'trabajo_modulo.%';
      
  3. 重启服务并重新安装:清理完成后,重启Odoo服务,再尝试安装模块。

额外建议:

  • 模型类名建议使用驼峰式命名(比如Restaurante而非restaurante),符合Odoo开发规范,避免潜在问题。
  • 每次修改模块核心字段后,建议先卸载旧模块再重新安装,避免数据库数据残留导致的异常。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:04:54