This question has been flagged
3 Replies
13862 Views


I am trying to log the changes on a One2many field using track_visibility='onchange'. But it's not working.

Here is the code:

respartner.py       

      bank_account_ids = fields.One2many('customer.bank.account','partner_id',     string='Account',track_visibility="onchange")

                                                                                                                                                                                                                         account.py


           

 _name = 'customer.bank.account'
_description = 'Partner Bank Account Details'

partner_id = fields.Many2one('res.partner',string="Partner")
name = fields.Integer(string="Account Number",required=True,
    track_visibility="onchange")
bank_id = fields.Many2one('partner.bank',string="Bank",track_visibility="onchange")
branch_id = fields.Many2one('partner.bank.branch',string="Branch",
    track_visibility="onchange")                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
Avatar
Discard
Best Answer

Hi Kabeer,

You cannot able to use track_visibility for one2many field, instead of you can use message_post method.

Consider following example 

class Anything(models.Model):
         _name = 'model.name'
         _inherit = ['mail.thread', 'ir.needaction_mixin']

         name = field.Char()
         main_model = fields.Many2one('main.model')

         @api.model
         def create(self, vals):
                 res = super(Anything, self).create(vals)
                 if vals:
                    message = "Changes info"
                     res.main_model.message_post(message)
                 return res

Thanks.

Avatar
Discard
Best Answer

Hello,

for one2many tracking checkout
https://www.dator.lu/blog/blog-1/one2many-tracking-3


Avatar
Discard
Best Answer



class Anything(models.Model):
    _name = 'model.name'
   _inherit = ['mail.thread', 'mail.activity.mixin']

    main_model = fields.Many2one('main.model')


    def _message_log(self, body='', subject=False, message_type='notification', **kwargs):
        super(Anything, self)._message_log(body=body, subject=subject, message_type=message_type,**kwargs)
 
        try:
            tracking_datas = kwargs.get('tracking_value_ids', [])
            value = ""
            for i in tracking_datas:
                value += self.format_change_log(i[2])
            self.main_model.message_post(body=f"Model Id : {self.id} <br><ul>{value}<ul>")
         except:
            pass


    @staticmethod
    def format_change_log(value):
        data = {}
        for i in value.keys():
            if i.startswith('old_value'):
                if not value[i]:
                    data['old_value'] = "False"
                else:
                    data['old_value'] = value[i]
            if i.startswith('new_value'):
                if not value[i]:
                    data['new_value'] = "False"
                else:
                     data['new_value'] = value[i]
        return f"<li>{value['field_desc']}({value['field']}) : {data['old_value'] if 'old_value' in data.keys() else 'False'} -> {data['new_value'] if 'new_value' in data.keys() else 'False'} </li>"
Avatar
Discard

not work on odoo 15