Odoo12继承res.users添加性别字段触发500内部服务器错误排查
解决Odoo继承res.users添加性别字段触发500错误的问题
我之前也踩过类似的坑,结合你的代码来看,大概率是必填字段的验证逻辑和现有用户数据冲突引发的服务器错误,给你几个具体的排查和解决方向:
1. 核心问题:必填字段无默认值,旧用户数据不满足验证
你给x_gender设置了required=True,但数据库里已经存在的res.users记录(比如默认的admin用户)并没有这个字段的值。当Odoo安装/升级模块时,会对所有现有记录执行字段合法性验证,直接触发500内部错误。
解决办法二选一:
from odoo import models, fields class UsersInherit(models.Model): _inherit = "res.users" # 方案1:先取消必填限制,后续补全所有用户数据后再开启 x_gender = fields.Selection(string="Gender", selection=[("male", "Male"), ("female", "Female")]) # 方案2:给字段设置默认值,自动给所有旧用户填充初始值 # x_gender = fields.Selection(string="Gender", selection=[("male", "Male"), ("female", "Female")], default="male")
2. 检查模块依赖是否正确
确保你的模块__manifest__.py里声明了对base模块的依赖——毕竟res.users是base模块自带的模型:
{ 'name': 'Your Module Name', 'version': '1.0', 'depends': ['base'], # 必须包含base,否则会找不到res.users模型 'data': [ 'views/users_view.xml', ], }
3. 优化视图继承代码
你的视图里用<h3>包裹字段,虽然不一定直接导致500,但可能影响表单渲染逻辑,建议简化成更标准的写法:
<?xml version="1.0" encoding="UTF-8"?> <odoo> <record id="resusersinherit" model="ir.ui.view"> <field name="name">erfan.usersinherit</field> <field name="model">res.users</field> <field name="inherit_id" ref="base.view_users_form"/> <field name="arch" type="xml"> <field name="login" position="after"> <field name="x_gender"/> </field> </field> </record> </odoo>
4. 最终操作步骤
- 如果已经安装过模块,先卸载模块,修改代码后重新安装;
- 如果不想卸载模块,也可以直接通过数据库工具(比如pgAdmin)给
res_users表的x_gender字段批量设置值,再升级模块。
内容的提问来源于stack exchange,提问作者Erfan Jahanshahloo
相关产品推荐
相关产品推荐

