From 8f45297edd7dfdd677b9a708b560532073b2c62f Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 14 Jan 2019 19:26:25 +0100 Subject: Fix M2M rollback: prevent bad rewriting of history_m2m --- ishtar_common/utils.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index e293562ff..ba77a07e4 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -943,13 +943,17 @@ def m2m_historization_changed(sender, **kwargs): continue values.append(value.history_compress()) hist_values[attr] = values - # force resave of last history record - if hasattr(obj, 'skip_history_when_saving'): - delattr(obj, 'skip_history_when_saving') obj.history_m2m = hist_values - obj._force_history = True - q = obj.history.order_by("-history_date") - if q.count(): - last = q.all()[0] - last.delete() + if getattr(obj, 'skip_history_when_saving', False): + # assume the last modifier is good... + q = obj.history.filter( + history_modifier_id=obj.history_modifier_id, + ).order_by('-history_date', '-history_id') + hist = q.all()[0] + hist.history_m2m = hist_values + hist.history_date = hist.last_modified = datetime.datetime.now() + hist.save() + obj.skip_history_when_saving = True + elif not obj.history_modifier: + obj.skip_history_when_saving = True obj.save() -- cgit v1.2.3