summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/migrations/0081_recreate_m2m_history.py34
-rw-r--r--ishtar_common/utils_migrations.py24
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()