Odoo在字段值修改时自动记录修改日志

Odoo在字段值修改时自动记录修改日志

在系统中往往会对一些关键字段的修改进行记录,包含修改人、修改时间、字段值由A到B等信息。Odoo的mail模块已经实现了此功能,只需要继承mail模块即可。

首先在要增加修改记录的模块__manifest__.py文件夹中depends参数增加mail依赖。

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

Models修改

增加mail模块依赖后,对要增加修改记录的具体model添加继承_inherit = ['mail.thread', 'mail.activity.mixin'],r然后对要增加记录的字段添加参数track_visibility='onchange', 代表在age字段修改时会在mail的对应模块增加修改记录信息,具体如下:

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class Students(models.Model):
    _name = 'school.students'
    _inherit = ['mail.thread', 'mail.activity.mixin']  # 添加mail继承关系
    
    name = fields.Char(string='名称', required=True)
    age = fields.Char(string='年龄', required=True, 
                            track_visibility='onchange')
                            

到这里其实就已经结束了,如果不需要在school.students模块的form表单展示具体修改记录,可以再设置中消息和追踪值中查看修改记录了。
查看修改记录模块

Form视图展示

如果想在form表单的详情中展示美化后的修改记录,需要在school.students模块的view.xml中增加form视图,然后添加message_ids字段的展示。具体如下:

<odoo>
    <data>
   
        <record model="ir.ui.view" id="school.students_change_logs_form">
            <field name="name">school.students form</field>
            <field name="model">school.students</field>
            <field name="arch" type="xml">
                <form string="" edit="false" create="false">
                    <sheet>
                        <div class="oe_title">
                            <h1>
                                <field name="name"/>
                            </h1>
                        </div>
                        <group>
                            <field name="age"/>
                        </group>
                    </sheet>
                    <!-- 修改记录展示,class样式是固定的 -->
                    <div class="oe_chatter">
                        <!-- <field name="message_follower_ids" widget="mail_followers"/>
                        <field name="activity_ids" widget="mail_activity"/> -->
                        <field name="message_ids" widget="mail_thread"/>
                    </div>
                </form>
            </field>
        </record>
        
    </data>
</odoo>

这个时候我们会在表单中看到类似如下的结果:
在这里插入图片描述

扩展:按钮展示Form表单

到上面已经结束了,但是还有一些需求,比如不能查看表单但是还想看修改记录,这时需要添加一个button按钮,跳转到model后台,然后返回表单页进行展示。

先在Students的model中添加跳转到form表单的方法。添加代码如下:

    @api.model
    def student_age_change_logs(self, vals):
        return {
            'name': "年龄修改记录",
            'view_mode': 'form',
            'view_id': self.env.ref('school.students_change_logs_form').id,
            'view_type': 'form',
            'res_model': 'school.students',
            'res_id': self.id,
            'type': 'ir.actions.act_window',
            'target': 'current',
            'domain': '[]'
        }

在view.xml中的tree视图添加button <button name="student_age_change_logs" type="object" string="修改记录" class="float-end btn-secondary"/>,调用student_age_change_logs方法即可。具体如下:

<odoo>
    <data>
   
        <record model="ir.ui.view" id="school.students__tree">
            <field name="name">school.students tree</field>
            <field name="model">school.students</field>
            <field name="arch" type="xml">
                <tree editable='bottom' default_order='age asc'>
                    <field name="name" readonly="True"/>
                    <field name="age"/>
                    <button name="student_age_change_logs" type="object" string="修改记录" class="float-end btn-secondary"/>
                </tree>
            </field>
        </record>
        
    </data>
</odoo>

Over!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在那路边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值