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

Odoo13:通过控制器为工单记录分配关注者时出现用户匹配错误的问题求助

问题分析与修复:添加工单关注者时匹配到错误用户

根据你的代码和描述,这个问题大概率是用户记录匹配逻辑的漏洞导致的,我帮你梳理了核心原因和对应的修复方案:

核心原因:重复邮箱或记录集处理不当

你的代码里用search([('email', '=', email)])查找用户,但Odoo的search返回的是记录集(可能包含多条匹配记录)。如果系统里有两个用户共用同一个邮箱(比如用户A和B的邮箱重复了),直接取follower.id时,Odoo会默认返回记录集中第一条记录的ID——这就会出现你输入用户A的邮箱,却意外添加了用户B的情况。

另外,你提到用户输入的是“用户A”(用户名),但代码是按邮箱搜索的,这也可能导致匹配错误:如果某个用户的邮箱刚好包含“用户A”的字符串?或者你误将用户名当成邮箱输入,代码匹配到了其他用户?

代码修复方案

我优化了你的代码,解决了记录集处理问题,还增加了用户名匹配的 fallback 逻辑,同时修正了mail.followers创建的一个潜在错误:

if 'followers' in request.params:
    raw_entries = request.httprequest.form.get('followers').split(',')
    entries = [entry.strip() for entry in raw_entries]
    
    for entry in entries:
        # 优先按邮箱精确匹配,限制只取1条记录
        user = request.env['res.users'].search([('email', '=', entry)], limit=1)
        
        if not user:
            # 如果邮箱匹配不到,尝试按用户名模糊匹配
            user = request.env['res.users'].search([('name', 'ilike', entry)], limit=1)
        
        if user:
            # 注意:mail.followers需要的是用户对应的partner_id,不是user_id!
            follower_vals = {
                'res_id': new_ticket.id,
                'res_model': 'helpdesk.ticket',
                'partner_id': user.partner_id.id
            }
            request.env['mail.followers'].create(follower_vals)
        else:
            message = f"待处理:将 {entry} 添加到系统并设为该工单的关注者"
            new_ticket.message_post(body=message)

修复的关键细节:

  1. 限制搜索结果数量:用limit=1确保只获取一条匹配记录,避免多条记录时的默认取值错误
  2. 添加用户名匹配逻辑:针对你提到的用户输入“用户A”(用户名)的场景,增加了模糊匹配用户名的逻辑,提升用户体验
  3. 修正partner_id参数:原代码直接用follower.id是错误的——mail.followers的partner_id需要关联的是res.partner的ID,而不是res.users的ID,用户记录的partner_id字段才是正确的关联值

额外排查建议

  • 检查重复邮箱:进入Odoo后台,打开设置 > 用户与公司 > 用户,搜索你测试时用的邮箱,确认是否有多个用户使用同一邮箱
  • 验证表单输入:确认表单的followers字段是否应该收集邮箱还是用户名,如果是用户名,建议将搜索逻辑改为优先按用户名匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:32:28