如何在res.users中添加字段并让所有模块默认可用?
在Odoo中为res.users添加全局可用字段的正确方式
你完全不需要修改原生的res.users模块,也不用创建独立的新模型——Odoo的模型继承机制专门解决这类扩展需求,具体步骤如下:
通过模型继承扩展
res.users
创建一个自定义模块,在模块的models目录下新建Python文件,通过_inherit关键字直接扩展原生res.users模型,添加所需字段。这种方式会把新字段合并到原生模型中,所有依赖res.users的模块都能直接访问这些字段。示例代码:from odoo import models, fields class ResUsers(models.Model): _inherit = 'res.users' # 仅继承,不创建新模型 phone_number = fields.Char(string='电话号码') room_number = fields.Char(string='房间号') extension_number = fields.Char(string='分机号')将字段添加到用户表单视图
要让新字段在后台用户界面显示,需要继承res.users的表单视图,把字段插入到合适位置。在模块的views目录下创建XML文件,示例代码:<odoo> <record id="view_users_form_extend" model="ir.ui.view"> <field name="name">res.users.form.extend</field> <field name="model">res.users</field> <field name="inherit_id" ref="base.view_users_form"/> <field name="arch" type="xml"> <!-- 选择在邮箱字段后插入新字段,可根据需求调整xpath定位 --> <xpath expr="//field[@name='email']" position="after"> <field name="phone_number"/> <field name="room_number"/> <field name="extension_number"/> </xpath> </field> </record> </odoo>配置并安装模块
在模块的__manifest__.py中声明models和views的路径,确保Odoo能加载这些文件。安装自定义模块后,所有内部模块就能直接通过res.users模型获取电话号码、房间号等字段,无需跨模块查询。
注:如果你之前尝试创建继承res.users的新模型(指定了_name),那确实会生成独立模型,Odoo不会自动用它替代原生res.users——但只要只保留_inherit不指定新_name,就是对原生模型的扩展,这才是正确的姿势。
内容的提问来源于stack exchange,提问作者Magician
相关产品推荐
相关产品推荐

