转自:https://jalena.bcsytv.com/archives/2012
转载备用,以防原文消失,如有侵权请联系本人删文!谢谢

【话唠】宁波-BO(939860269) 09:24:55
客户需要追踪基础信息的改动过程。打开数据能一眼看出。
多个客户有相同需求,再加上使用过国内系统都有这个功能。

Odoo Logging changes(消息通知机制)

2018.05.16
Jalena
No Responses
Odoo
odoo

最近在开发一个项目管理系统,客户希望某些字段在改变的时候记录下这个字段的改变信息。这时候就可以使用Odoo的消息通知机制。

官方文档:https://www.odoo.com/documentation/10.0/reference/mixins.html#logging-changes
一、引入消息模型

__manifest__.py 文件增加依赖关系

'depends': ['base', 'mail']

class Modle(models.Model):
    _name = "demo"
    _inherit = ['mail.thread']

在form中增加消息显示代码

<form>
   ....
   省略一串代码
   ....
    <div class="oe_chatter">
        <field name="message_follower_ids"
               widget="mail_followers"/>
        <field name="message_ids" widget="mail_thread"/>
    </div>
</form>

二、定义追踪属性

在模块引入了消息机制模型后,track_visibility属性即可使用,它支持如下两种写法。

track_visibility='always'
track_visibility='onchange'

定义字段改变显示的内容

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="True">
        <!-- mail-->
        <record id="mt_state_change" model="mail.message.subtype">
            <field name="name">confirmed</field>
            <field name="res_model">demo</field>
            <field name="default" eval="True"/>
            <field name="description">项目状态变更为正式立项!</field>
        </record>
    </data>
</odoo>

class Modle(models.Model):
    _name = "demo"
    _inherit = ['mail.thread']

    state = fields.Selection(selection=[('draft', 'Draft'), ('confirmed', 'Confirmed'), ], default='draft', track_visibility='onchange')
    name = fields.Char(string="IP name", required=True, track_visibility='always')

    # 重写该方法,在合适的条件下调用前面声明的消息内容
    def _track_subtype(self, init_values):
    self.ensure_one()
    if 'state' in init_values and self.state == 'confirmed':
        return 'project_manager.mt_state_change'
    return super(Modle, self)._track_subtype(init_values)

三、效果
message.png