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

Odoo 15 CE:如何避免消息附件关联至合作伙伴/联系人记录?

Odoo 15 CE:如何避免消息附件关联至合作伙伴/联系人记录?

嗨,这个问题我之前帮朋友处理过类似的,核心就是要修改Odoo自动把消息附件绑定到当前业务记录(这里就是合作伙伴)的逻辑。下面给你具体的实现步骤,都是基于Odoo 15 CE的自定义模块开发,完全不需要修改核心代码:

思路说明

Odoo默认会把chatter里上传的附件同时绑定到当前打开的业务记录(比如你这里的合作伙伴)和对应的消息记录。我们要做的就是在消息创建完成后,把附件的res.model和res.id字段清空,让附件只和消息绑定,不再关联到合作伙伴。

具体实现步骤

1. 创建自定义模块

首先你需要新建一个自定义模块(比如命名为custom_mail_attachment),模块结构如下:

custom_mail_attachment/
├── __init__.py
├── __manifest__.py
└── models/
    ├── __init__.py
    └── mail_message.py

2. 编写模块配置文件(manifest.py)

{
    'name': '自定义邮件附件处理',
    'version': '1.0',
    'author': '自定义作者',
    'category': '工具',
    'depends': ['base', 'mail'],
    'data': [],
    'installable': True,
    'auto_install': False,
}

3. 重写Mail Message模型处理附件

在models/mail_message.py里添加以下代码:

from odoo import models, api

class MailMessage(models.Model):
    _inherit = 'mail.message'

    @api.model
    def create(self, vals):
        # 先调用原方法创建消息
        new_message = super(MailMessage, self).create(vals)
        
        # 如果消息有附件,清空附件的业务记录关联字段
        if new_message.attachment_ids:
            new_message.attachment_ids.write({
                'res_model': False,
                'res_id': 0
            })
        
        return new_message

这段代码的作用是:每当一条新消息被创建(不管是手动从chatter发送的,还是邮件服务器抓取生成的),都会自动把这条消息关联的所有附件的res.model(关联模型)和res.id(关联记录ID)清空,这样附件就不会绑定到任何合作伙伴记录了。

4. 安装模块测试

把模块打包安装到你的Odoo 15 CE实例里,然后做两个测试验证效果:

  • 打开一个合作伙伴的chatter,发送带PDF附件的消息,然后去技术设置->附件里查看这条附件的res.model和res.id是否为空
  • 用邮件服务器抓取一封带附件的邮件,生成消息后,同样检查附件的关联字段是否为空

补充选项

如果你不想完全清空附件的关联字段,而是想让附件只绑定到消息本身,也可以把res_model设为mail.message,res_id设为消息的ID,修改代码里的写入部分就行:

new_message.attachment_ids.write({
    'res_model': 'mail.message',
    'res_id': new_message.id
})

这样附件就会和消息记录绑定,而不是合作伙伴记录,同样能满足你的需求。

备注:内容来源于stack exchange,提问作者ECFS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:19:49