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

Odoo 10中如何将用户邮箱设为Joked模型的外键?

解决Odoo模型中用户邮箱存储的问题

首先得明确一个关键点:在Odoo里,Many2one字段的核心作用是关联另一个模型的记录,它在数据库中存储的始终是关联记录的ID,而不是该记录的某个字段值(比如邮箱)。所以你当前的last_accessed_by字段存储用户ID是完全正常的默认行为。

接下来根据你的实际需求,给你两种针对性的解决方案:

需求1:只是想在界面上显示用户邮箱,而非用户ID/名称

这种情况不需要修改模型字段,只需要调整视图配置即可:

  • 如果你想保留Many2one的选择功能,但让界面显示邮箱作为字段内容:
    在XML视图里这样定义字段:
    <field name="last_accessed_by" string="Complainant Email" options="{'no_open': True}"/>
    
    (前提是你已经在res.users模型的视图配置中,把邮箱设为该模型的显示名称字段,或者调整了Many2one控件的显示逻辑)
  • 如果你只想只读显示邮箱,不需要选择用户的功能:
    直接在视图里调用关联用户的邮箱字段:
    <field name="last_accessed_by.email" string="Complainant Email" readonly="True"/>
    

需求2:需要在Joked模型中单独存储用户邮箱(作为独立数据库字段)

如果确实要把邮箱值存在Joked模型的数据库表里,可以新增一个Char字段,通过两种方式填充:

方案A:默认值自动填充当前用户邮箱

适合不需要后续同步用户邮箱的场景:

last_accessed_by = fields.Many2one('res.users', string='Complainant', default=lambda self: self.env.uid, required=True)
# 新增独立的邮箱字段
complainant_email = fields.Char(string='Complainant Email', default=lambda self: self.env.user.email, required=True)

这样创建记录时,会自动把当前登录用户的邮箱存入complainant_email,但注意如果用户之后在res.users里修改了邮箱,这个字段不会自动同步更新。

方案B:计算字段自动同步邮箱

适合需要实时同步用户最新邮箱的场景:

from odoo import models, fields, api

class Joked(models.Model):
    _name = 'joked'
    _description = 'Joked Model'

    last_accessed_by = fields.Many2one('res.users', string='Complainant', default=lambda self: self.env.uid, required=True)
    complainant_email = fields.Char(string='Complainant Email', compute='_compute_complainant_email', store=True)

    @api.depends('last_accessed_by')
    def _compute_complainant_email(self):
        for record in self:
            record.complainant_email = record.last_accessed_by.email if record.last_accessed_by else False

这里store=True会把计算出的邮箱值存在数据库中,方便后续查询;当last_accessed_by关联的用户发生变化,或者该用户的邮箱被修改时,这个字段会自动更新为最新值。

总结一下:如果是关联用户的业务需求,保留Many2one到res.users是正确的设计;如果要展示或存储邮箱,通过视图调整或新增字段来实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:51