Odoo中如何通过Employee模型的res.users外键展示用户详情
嘿,针对你在Odoo里想通过Employee模型的user_id外键展示关联用户更多详情的需求,我给你整理了几种实用的实现方法,你可以根据自己的场景选择:
方法1:直接在视图中引用关联字段
这种方法不需要修改模型代码,直接在表单视图里通过user_id.字段名的方式调用关联res.users模型的字段,设置为只读即可:
<group string="关联用户详情"> <!-- 原有的user_id字段,用来选择用户 --> <field name="user_id"/> <!-- 展示关联用户的ID、名称、邮箱 --> <field name="user_id.id" string="用户ID" readonly="1"/> <field name="user_id.name" string="用户姓名" readonly="1"/> <field name="user_id.email" string="用户邮箱" readonly="1"/> <!-- 可以继续添加其他需要的字段,比如user_id.login、user_id.phone等 --> </group>
优点:快速实现,无需改动模型,适合临时展示少量字段的场景。
方法2:使用Form Widget内嵌展示用户完整详情
如果你想更直观地展示用户的完整表单信息,可以给user_id字段指定form类型的widget,并内嵌用户的视图结构:
<field name="user_id" widget="form" options="{'mode': 'view'}"> <form string="用户详情"> <group> <field name="id"/> <field name="name"/> <field name="email"/> <field name="login"/> <field name="phone"/> <!-- 按需添加res.users模型的其他字段 --> </group> </form> </field>
这里的options="{'mode': 'view'}"会把内嵌的用户表单设置为只读模式,避免误修改关联用户的信息。点击user_id字段时,也会弹出完整的用户详情弹窗(符合Odoo标准交互)。
优点:集中展示用户的完整信息,交互体验更流畅。
方法3:通过关联字段(Related Fields)封装用户信息
如果你的多个视图都需要展示这些用户详情,或者需要对这些字段做后续扩展,可以在Employee模型中定义关联字段,把res.users的字段映射过来:
# 在Employee模型中添加以下代码 user_id = fields.Many2one('res.users', string='用户', default=lambda self: self.env.user) # 关联用户的登录账号 user_login = fields.Char(string='登录账号', related='user_id.login', readonly=True) # 关联用户的邮箱 user_email = fields.Char(string='用户邮箱', related='user_id.email', readonly=True) # 关联用户的电话 user_phone = fields.Char(string='联系电话', related='user_id.phone', readonly=True)
然后在表单视图中直接使用这些封装好的字段:
<group string="关联用户详情"> <field name="user_id"/> <field name="user_login"/> <field name="user_email"/> <field name="user_phone"/> </group>
优点:字段复用性强,后续如果需要调整展示的字段,只需要修改模型代码即可,不用逐个修改视图。
内容的提问来源于stack exchange,提问作者Mingg Lex
相关产品推荐
相关产品推荐

