diff options
| -rw-r--r-- | ishtar_common/migrations/0081_recreate_m2m_history.py | 34 | ||||
| -rw-r--r-- | ishtar_common/utils_migrations.py | 24 | 
2 files changed, 58 insertions, 0 deletions
| diff --git a/ishtar_common/migrations/0081_recreate_m2m_history.py b/ishtar_common/migrations/0081_recreate_m2m_history.py new file mode 100644 index 000000000..e26a3f185 --- /dev/null +++ b/ishtar_common/migrations/0081_recreate_m2m_history.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2019-01-16 11:16 +from __future__ import unicode_literals + +from django.db import migrations +from ishtar_common.utils_migrations import m2m_historization_init + + +def recreate_m2m_migrations(apps, schema_editor): +    from archaeological_context_records.models import ContextRecord +    from archaeological_files.models import File +    from archaeological_finds.models import Find, Treatment +    from archaeological_operations.models import Operation, ArchaeologicalSite +    history_models = [ +        ContextRecord, File, Find, Treatment, Operation, ArchaeologicalSite +    ] +    for model in history_models: +        for item in model.objects.all(): +            m2m_historization_init(item) + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('ishtar_common', '0080_auto_20190111_1755'), +        ('archaeological_context_records', '0036_auto_20190111_1755'), +        ('archaeological_files', '0017_auto_20190111_1755'), +        ('archaeological_finds', '0055_auto_20190111_1755'), +        ('archaeological_operations', '0044_auto_20190111_1755') +    ] + +    operations = [ +        migrations.RunPython(recreate_m2m_migrations) +    ] diff --git a/ishtar_common/utils_migrations.py b/ishtar_common/utils_migrations.py index d161c1f29..edbeb5567 100644 --- a/ishtar_common/utils_migrations.py +++ b/ishtar_common/utils_migrations.py @@ -1,6 +1,8 @@  # -*- coding: utf-8 -*-  from __future__ import unicode_literals +import datetime +  from django.core.files import File  import os @@ -112,3 +114,25 @@ def migrate_main_image(apps, app_name, model_name):          item.skip_history_when_saving = True          item.save() + +def m2m_historization_init(obj): +    hist_values = obj.history_m2m or {} +    for attr in obj.HISTORICAL_M2M: +        values = [] +        for value in getattr(obj, attr).all(): +            if not hasattr(value, "history_compress"): +                continue +            values.append(value.history_compress()) +        hist_values[attr] = values +    obj.history_m2m = hist_values +    for hist in obj.history.all(): +        hist.history_m2m = hist_values +        d = hist.history_date +        date = datetime.datetime(year=d.year, month=d.month, day=d.day, +                                 hour=d.hour, minute=d.minute, second=d.second, +                                 microsecond=d.microsecond) +        hist.history_date = date +        hist.last_modified = date +        hist.save() +    obj.skip_history_when_saving = True +    obj.save() | 
