Odoo - Mixins and Useful Classes

本文介绍了如何在Odoo中利用mail.thread类轻松地为自定义模型集成消息功能。通过简单的模型继承和视图修改,即可实现消息跟踪和讨论功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Odoo 提供了一些 classed 和 mixins,用以帮助你轻松的建立一些常用的功能。

Messaging features

Messaging integration

Basic messaging system

将 messaging feature 整合到你自己的 model 中将是非常的容易。仅需要在你的 model 的定义中添加继承 mail.thread,以及在你的 form view 中添加对应的字段和 widgets,就可以了。

class BusinessTrip(models.Model):
    _name = 'business.trip'
    _inherit = ['mail.thread']
    _description = 'Business Trip'

    name = fields.Char()
    partner_id = fields.Many2one('res.partner', 'Responsible')
    guest_ids = fields.Many2many('res.partner', 'Participants')

form view 中 添加

<record id="businness_trip_form" model="ir.ui.view">
    <field name="name">business.trip.form</field>
    <field name="model">business.trip</field>
    <field name="arch" type="xml">
        <form string="Business Trip">
            <!-- Your usual form view goes here
            ...
            Then comes chatter integration -->
            <div class="oe_chatter">
                <field name="message_follower_ids" widget="mail_followers"/>
                <field name="message_ids" widget="mail_thread"/>
            </div>
        </form>
    </field>
</record>

一旦你在 model 中添加了 chatter support,用户就可以非常方便的在这个 model 的任意 record 上,添加 message。这些修改或留言,也会自动的发给这个 record 的 followers ,当然前提是,系统的 email 配置都是正确的。

Posting messages
  • message_post(self,body='',subject=None,message_type='notification',subtype=None,parent_id=False,attachments=None,content_subtype='html',**kwargs)
    提交一个新的 message 到 existing thread,并返回这个 message 的 ID。
--
Parameters:body(str) – message的内容,如果是html将会被转意
message_type(str) – see mail_message.type field
content_subtype(str) – 如果是普通文本数据,convert body into html
parent_id(int) – 用来回复之前的 message,主要是私人对话
attachments(list(tuple(str,str))) – list of tuple, tuple是 (name, content), content 不是 base64 encoded
**kwargs – extra keyword arguments will be used as default column values for the new mail.message record
Returns:id of newly created mail.message
Return Type:int

- message_post_with_view(views_or_xmlid, **kwargs)
用来 send email 或者 post a message,使用 ir.qweb 引擎来渲染这个 view_id。This method is stand alone, because there is nothing in template and composer that allows to handle views in batch. This method will probably disappear when templates handle ir ui views.

--
Parameters:ir.ui.view record(str) – external id or record of the view that should be sent

message_post_with_template(template_id, **kwargs)
通过指定 template 来发送 message。

--
Parameters:template_id – 使用模板的 id
**kwargs – 用来创建 mail.compose.message wizard的参数,继承自 mail.message
Receiving messages

下述方法都是当 mail gateway 收到新的邮件时,才会被调用。这些 email 可以被当前的 thread 自动回复,或者一个新的 thread。重写下面几个方法,将会使得你可以根据 email 中的一些特定值,再返回不同的邮件(i.e. 修改时间,以及根据 email-address,修改 CC address, etc.)。

  • message_new(msg_dict, custom_values=None)
### 解决方案 当通过源码安装 Odoo 时,`odoo-bin` 是 Odoo 的入口脚本文件。如果发现缺少 `odoo-bin` 文件,通常是因为未正确完成某些前置步骤或环境配置不完整。以下是可能的原因及对应的解决方法: #### 1. **确认是否成功克隆完整的 Odoo 源码** 如果在执行 `git clone` 命令时未指定分支或者网络中断可能导致部分文件缺失。重新尝试克隆命令并确保使用正确的分支名称。 ```bash git clone https://github.com/odoo/odoo.git odoo16 -b 16.0 --depth=1 ``` 此外,在克隆完成后进入目录检查是否存在 `odoo-bin` 文件[^1]。 #### 2. **Python 虚拟环境和依赖项的安装** 在安装 Odoo 所需的 Python 依赖之前,建议创建虚拟环境以隔离系统环境中的其他包版本冲突。 创建并激活虚拟环境: ```bash python3 -m venv odoo-env source odoo-env/bin/activate ``` 接下来,安装所需的 Python 依赖项。可以通过以下命令实现: ```bash pip install -r requirements.txt ``` 这里的 `requirements.txt` 文件位于 Odoo 源码根目录下,包含了运行 Odoo 需要的所有 Python 包列表[^2]。 #### 3. **编译本地化支持和其他原生依赖** 对于一些需要 C/C++ 编译的支持库(如 `lxml`, `psycopg2`),必须先安装系统的开发工具链以及相应的头文件和库文件。这些通常是通过操作系统的包管理器安装的。 在 Ubuntu 系统中,可以运行以下命令来安装必要的原生依赖: ```bash sudo apt-get update sudo apt-get install -y build-essential wget git python3-pip \ python3-dev python3-setuptools python3-virtualenv \ libpq-dev libsasl2-dev libldap2-dev libssl-dev libxml2-dev \ libxslt1-dev node-less npm ``` 完成后再次尝试安装 Python 依赖项[^3]。 #### 4. **手动生成 `odoo-bin` 文件** 如果经过以上步骤仍然无法找到 `odoo-bin` 文件,则可能是由于某些原因导致该文件未能自动生成。此时可以手动复制模板文件作为替代。 在 Odoo 源码仓库中,存在一个名为 `setup.py` 的脚本用于构建项目结构。运行此脚本可能会帮助生成缺失的二进制文件: ```bash python3 setup.py build python3 setup.py develop ``` 若仍未解决问题,可以直接从已知正常工作的环境中提取一份标准的 `odoo-bin` 并放置到当前工作目录下[^4]。 #### 5. **验证 PostgreSQL 是否正常工作** 确认数据库服务已经启动并且能够被访问。如果没有正确设置数据库连接参数也可能间接影响程序初始化过程从而造成异常行为。 --- ### 总结 按照上述流程逐一排查问题根源所在,并采取相应措施修复即可恢复正常的 Odoo 开发环境搭建状态。最终目标是要让整个框架具备足够的条件去加载核心组件和服务端逻辑处理能力。 ```python import sys from pathlib import Path if __name__ == "__main__": prog_name = f"{Path(sys.argv[0]).name} custom_entry" print(f"Program Name: {prog_name}") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值