实践环境
Odoo 14.0-20221212 (Community Edition)
需求描述
如图,给表单新增一个类似聊天的窗口,当记录一些表单活动(本例为自动记录当前记录状态变化)
需求实现
模型定义
odoo14\custom\estate\models\estate_property.py
需要继承mail.thread
模型,并为需要追踪的字段设置tracking
属性,并设置属性值为真值
#!/usr/bin/env python # -*- coding: utf-8 -*- from odoo import models, fields, api class EstateProperty(models.Model): _name = 'estate.property' _description = 'estate property table' _inherit = ['mail.thread'] # 必须继承该模型 name = fields.Char(required=True) state = fields.Selection( string='State', selection=[('new','New'), ('offerReceived','Offer Received'), ('offerAccepted', 'Offer Accepted'), ('sold','Sold'), ('canceled', 'Canceled')], copy=False, tracking=1 # 该属性不能少,且必须为真值 ) # ...此处代码略
说明:
mail.thread
模型,该模型类型为models.AbstractModel
,其定义文件为odoo14\odoo\addons\mail\models\mail_thread.py
,其字段命名均以message_
开头tracking
该属性为True
或数字时,打开针对该属性所属字段的修改日志--当所属字段内容发生变化时,系统会将该字段变化前后的值写入日志中,这个数字的大小影响变更日志在日志中的排序。
__manifest__.py
配置
odoo14\custom\estate\__manifest__.py
需要配置mail
模块依赖,因为mail.thread
模型归属该模块
#!/usr/bin/env python # -*- coding:utf-8 -*- { 'name': 'estate', 'depends': ['base', 'mail'], # 此处代码略... }
视图定义
添加<div class="oe_chatter">
元素,内容如下
<?xml version="1.0"?> <odoo> <!--此处代码略--> <record id="estate_property_view_form" model="ir.ui.view"> <field name="name">estate.property.form</field> <field name="model">estate.property</field> <field name="arch" type="xml"> <form string="estate property form"> <!--此处代码略--> <div class="oe_chatter"> <field name="message_follower_ids"/> <field name="message_ids"/> </div> </form> </field> </record> </odoo>
如果希望在窗口中展示添加更多功能,可以添加字段,如下
<div class="oe_chatter"> <field name="message_follower_ids"/> <field name="activity_ids" widget="mail_activity"/>--> <field name="message_ids"/> </div>
说明:activity_ids
来自mail.activity.mixin
模型,类型为models.AbstractModel
,定义在文件 odoo14\odoo\addons\mail\models\mail_activity.py
,其字段命名均以activity_
,对应的,模型定义中_inherit
属性也需要添加该模块,如下:
_inherity= ['mail.thread', 'mail.activity.mixin']
效果: