if getattr(field, ‘track_visibility‘, False):
def _message_track(self, tracked_fields, initial):
""" For a given record, fields to check (tuple column name, column info)
and initial values, return a structure that is a tuple containing :
- a set of updated column names
- a list of changes (initial value, new value, column name, column info) """
self.ensure_one()
changes = set() # contains always and onchange tracked fields that changed
displays = set() # contains always tracked field that did not change but displayed for information
tracking_value_ids = []
display_values_ids = []
# generate tracked_values data structure: {'col_name': {col_info, new_value, old_value}}
for col_name, col_info in tracked_fields.items():
track_visibility = getattr(self._fields[col_name], 'track_visibility', 'onchange')
initial_value = initial[col_name]
new_value = getattr(self, col_name)
if new_value != initial_value and (new_value or initial_value): # because browse null != False
track_sequence = getattr(self._fields[col_name], 'track_sequence', 100)
tracking = self.env['mail.tracking.value'].create_tracking_values(initial_value, new_value, col_name,
col_info, track_sequence)
if tracking:
tracking_value_ids.append([0, 0, tracking])
if col_name in tracked_fields:
changes.add(col_name)
# 'always' tracked fields in separate variable; added if other changes
elif new_value == initial_value and track_visibility == 'always' and col_name in tracked_fields:
track_sequence = getattr(self._fields[col_name], 'track_sequence', 100)
tracking = self.env['mail.tracking.value'].create_tracking_values(initial_value, new_value, col_name,
col_info, track_sequence)
if tracking:
display_values_ids.append([0, 0, tracking])
displays.add(col_name)
if changes and displays:
tracking_value_ids = display_values_ids + tracking_value_ids
return changes, tracking_value_ids
odoo addon mail mail_thread.py "always"
odoo 12.0 track_visibility == 'always' 无效
原文:https://www.cnblogs.com/edhg/p/11434625.html