Odoo 14 Enterprise创建用户时出现ValueError错误求助
从你的错误栈可以明确看到核心问题:ValueError: Wrong value for res.partner.company_type: '0' —— 在创建用户时,系统自动创建关联的合作伙伴(res.partner)时,给company_type字段传入了非法值'0',而这个字段的合法选项只有'person'(个人)和'company'(公司)两种。
下面是几个可行的排查和修复步骤:
第一步:定位错误值的来源
从traceback里能看到,创建流程经过了generic_security_restriction模块的res_users.create方法,先检查这个自定义/第三方模块的代码,看它是否在创建用户时,给关联的partner传递了错误的company_type值。另外,也要检查其他可能修改res.partner或res.users创建逻辑的模块,比如有没有自定义的onchange钩子、默认值设置。第二步:修复字段默认值
有可能是res.partner的company_type字段被错误设置了默认值。你可以通过数据库查询确认:SELECT default_value FROM ir_fields WHERE name='company_type' AND model='res.partner';如果结果是
'0',直接把它改成'person'(默认个人)或者'company',然后重启Odoo服务。第三步:临时补丁拦截错误值
如果暂时找不到错误来源,可以创建一个小模块,在res.partner的创建方法里拦截非法值,自动转换为合法选项:from odoo import models, api class ResPartnerFixCompanyType(models.Model): _inherit = 'res.partner' @api.model def create(self, vals_list): # 遍历所有要创建的partner数据,修正非法的company_type值 for vals in vals_list: if vals.get('company_type') == '0': vals['company_type'] = 'person' # 可根据实际需求改为'company' return super().create(vals_list)把这个模块安装到系统里,确保它的加载顺序在其他修改res.partner创建逻辑的模块之后(可以通过模块的
depends设置控制)。第四步:清理已有错误数据
如果数据库里已经存在company_type='0'的partner记录,需要先清理,避免后续操作触发其他错误:-- 操作前务必备份数据库! UPDATE res_partner SET company_type='person' WHERE company_type='0';
完成这些步骤后,再尝试创建用户应该就能正常执行了。
内容的提问来源于stack exchange,提问作者Fotic

