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

Odoo 10表单提交无法正确存储当前会话用户ID问题求助

解决Odoo中Many2one字段默认值始终为管理员的问题

嘿,我之前也踩过一模一样的坑!咱们一步步来排查和解决这个问题:

可能的原因&对应解决方案

1. 模型/字段权限不足

如果普通用户对你的邮件模型没有创建/写入权限,或者user_id字段被设置为不可写,Odoo可能会自动用管理员身份(ID=1)填充这个字段。

排查步骤:

  • 进入「设置」→「技术」→「模型」,找到你的邮件模型(比如mail.custom_mail)
  • 查看对应的「访问权限」记录,确保普通用户所属的用户组拥有「创建」和「写入」权限
  • 再检查「记录规则」,有没有针对user_id字段的强制规则(比如强制绑定管理员),如果有就调整或删除

2. 重写create方法时覆盖了默认值

如果你在邮件模型的Python代码里重写了create方法,不小心硬编码了user_id的值,就会完全覆盖你设置的default逻辑。

比如这种错误写法:

def create(self, vals):
    # 硬编码会强制把user_id设为管理员
    vals['user_id'] = 1
    return super().create(vals)

修正方法:只在vals里没有user_id值的时候才补充默认值,或者直接保留原default的逻辑:

def create(self, vals):
    # 仅当用户未指定user_id时,使用当前登录用户
    if not vals.get('user_id'):
        vals['user_id'] = self.env.user.id
    return super().create(vals)

3. 表单视图的字段设置异常

虽然你的字段定义没问题,但如果表单视图里的user_id字段被设置了特殊属性,也可能导致异常:

  • 检查视图里的user_id字段是否设置了readonly="1"但未保留默认值传递逻辑
  • 确保没有使用force_save="1"这类可能干扰字段值的属性

4. 浏览器缓存或会话异常

有时候浏览器缓存的旧会话会导致上下文错乱,试试用隐私模式登录不同用户测试,排除缓存问题。

确认字段定义正确性

先确保你的字段写法本身没问题,推荐加上required=True强制字段赋值,方便测试:

user_id = fields.Many2one('res.users', string='发送用户', default=lambda self: self.env.user, required=True)

最终验证方式

创建一条邮件记录后,直接查看数据库对应的表(比如模型是mail.custom_mail,表名就是mail_custom_mail),观察user_id字段的实际值:

  • 如果数据库里是正确的用户ID,但界面显示管理员,那是视图或权限的问题
  • 如果数据库里就是管理员ID=1,那肯定是后端逻辑或权限的问题

按照上面的步骤排查,应该很快就能定位到问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:03:51