diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-14 19:26:25 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-14 19:26:25 +0100 | 
| commit | 8f45297edd7dfdd677b9a708b560532073b2c62f (patch) | |
| tree | b0e482fb4f05fc2acf31e4eea31f94aa5d6f1f9a /ishtar_common/utils.py | |
| parent | 6275ac4d3388f912a831c3f6178c3832ce9297b5 (diff) | |
| download | Ishtar-8f45297edd7dfdd677b9a708b560532073b2c62f.tar.bz2 Ishtar-8f45297edd7dfdd677b9a708b560532073b2c62f.zip | |
Fix M2M rollback: prevent bad rewriting of history_m2m
Diffstat (limited to 'ishtar_common/utils.py')
| -rw-r--r-- | ishtar_common/utils.py | 20 | 
1 files changed, 12 insertions, 8 deletions
| 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() | 
