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
相关产品推荐
相关产品推荐

