Jalena Blog

  • 首页
  • 程序开发
    • Java
    • Spring
    • SpringBoot
    • SpringMvc
    • Python
    • Odoo
    • C#
    • SQL
    • Web
    • Linux
  • 移动设备
    • Android
    • Router
  • 杂七杂八
    • 我的废话
    • 音频
    • 视频
    • 常用软件
  • 关于
  1. 首页
  2. 软件开发
  3. Python
  4. Odoo
  5. 正文

Odoo Logging changes(消息通知机制)

2018-05-16

最近在开发一个项目管理系统,客户希望某些字段在改变的时候记录下这个字段的改变信息。这时候就可以使用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属性即可使用,它支持如下两种写法。

  1. track_visibility='always'
  2. 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)
最终效果
标签: odoo
最后更新:2019-01-02

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

点赞
< 上一篇
下一篇 >

文章评论

  • Faix

    你好,我最近也在做一个消息推送,我遇到了一些问题,不知道你有没有遇到,就是:

    我做了一个企业微信推送,然后我扩展了原生的_message_track_get_changes方法,实现了跟踪值的推送,但是也带来一些问题。我在应用到销售订单的时候,老是会推送之前的成功网上付款(我配置了网站的支付宝)的订单,老是推送我发现是因为有个定时任务一直在执行_cron_post_process_after_done这个函数导致的,我查了一大圈都没有找到症结点在哪里,不知道你有没有遇过这个问题。

    2020-07-01
    回复
    • Jalena

      @Faix 最好不要重写change这类的事件来触发动作,因为它会重复触发。

      2020-09-25
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    【腾讯云】云服务器特惠热卖中
    文章目录
    • 一、引入消息模型
    • 二、定义追踪属性
    标签聚合
    java Centos odoo 其他 生活 wordpress docker MySql
    分类
    • Android / 4篇
    • C# / 10篇
    • Codec / 9篇
    • Conversion / 14篇
    • Editing / 16篇
    • Java / 47篇
    • Javascript / 3篇
    • Linux / 30篇
    • Odoo / 25篇
    • Python / 6篇
    • SQL / 30篇
    • Web / 3篇
    • Windows / 4篇
    • 我的日记 / 10篇
    • 杂七杂八 / 93篇
    • 软件开发 / 72篇
    • 非线性编辑 / 1篇

    COPYRIGHT © 2026 Jalena Blog. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    蜀ICP备17025376号