[IMP] Dont query non-stored related or computed fields on full auditlog, this can slow down the system a lot and gives no useful info
parent
e1e89394c8
commit
65667ad6f1
|
@ -90,6 +90,7 @@ Contributors
|
|||
* Holden Rehg <holdenrehg@gmail.com>
|
||||
* Eric Lembregts <eric@lembregts.eu>
|
||||
* Alan Ramos <alan.ramos@jarsa.com.mx>
|
||||
* Tom Blauwendraat <tom@sunflowerweb.nl>
|
||||
|
||||
Other credits
|
||||
~~~~~~~~~~~~~
|
||||
|
|
|
@ -232,6 +232,19 @@ class AuditlogRule(models.Model):
|
|||
self.unsubscribe()
|
||||
return super(AuditlogRule, self).unlink()
|
||||
|
||||
@api.model
|
||||
def get_auditlog_fields(self, model):
|
||||
"""
|
||||
Get the list of auditlog fields for a model
|
||||
By default it is all stored fields only, but you can
|
||||
override this.
|
||||
"""
|
||||
return list(
|
||||
n
|
||||
for n, f in model._fields.items()
|
||||
if (not f.compute and not f.related) or f.store
|
||||
)
|
||||
|
||||
def _make_create(self):
|
||||
"""Instanciate a create method that log its calls."""
|
||||
self.ensure_one()
|
||||
|
@ -248,9 +261,12 @@ class AuditlogRule(models.Model):
|
|||
# stored in the database only at the end of the transaction, but
|
||||
# their values exist in cache.
|
||||
new_values = {}
|
||||
fields_list = rule_model.get_auditlog_fields(self)
|
||||
for new_record in new_records:
|
||||
new_values.setdefault(new_record.id, {})
|
||||
for fname, field in new_record._fields.items():
|
||||
if fname not in fields_list:
|
||||
continue
|
||||
new_values[new_record.id][fname] = field.convert_to_read(
|
||||
new_record[fname], new_record
|
||||
)
|
||||
|
@ -332,18 +348,19 @@ class AuditlogRule(models.Model):
|
|||
def write_full(self, vals, **kwargs):
|
||||
self = self.with_context(auditlog_disabled=True)
|
||||
rule_model = self.env["auditlog.rule"]
|
||||
fields_list = rule_model.get_auditlog_fields(self)
|
||||
old_values = {
|
||||
d["id"]: d
|
||||
for d in self.sudo()
|
||||
.with_context(prefetch_fields=False)
|
||||
.read(list(self._fields))
|
||||
.read(fields_list)
|
||||
}
|
||||
result = write_full.origin(self, vals, **kwargs)
|
||||
new_values = {
|
||||
d["id"]: d
|
||||
for d in self.sudo()
|
||||
.with_context(prefetch_fields=False)
|
||||
.read(list(self._fields))
|
||||
.read(fields_list)
|
||||
}
|
||||
rule_model.sudo().create_logs(
|
||||
self.env.uid,
|
||||
|
@ -388,11 +405,12 @@ class AuditlogRule(models.Model):
|
|||
def unlink_full(self, **kwargs):
|
||||
self = self.with_context(auditlog_disabled=True)
|
||||
rule_model = self.env["auditlog.rule"]
|
||||
fields_list = rule_model.get_auditlog_fields(self)
|
||||
old_values = {
|
||||
d["id"]: d
|
||||
for d in self.sudo()
|
||||
.with_context(prefetch_fields=False)
|
||||
.read(list(self._fields))
|
||||
.read(fields_list)
|
||||
}
|
||||
rule_model.sudo().create_logs(
|
||||
self.env.uid,
|
||||
|
|
Loading…
Reference in New Issue