diff options
Diffstat (limited to 'archaeological_operations/migrations')
6 files changed, 708 insertions, 0 deletions
diff --git a/archaeological_operations/migrations/0125_archaeologicalsite_actors.py b/archaeological_operations/migrations/0125_archaeologicalsite_actors.py new file mode 100644 index 000000000..ac1d91587 --- /dev/null +++ b/archaeological_operations/migrations/0125_archaeologicalsite_actors.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.19 on 2026-03-24 09:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0274_qualifiedbiographicalnote'), + ('archaeological_operations', '0124_archaeologicalsite_cached_types'), + ] + + operations = [ + migrations.AddField( + model_name='archaeologicalsite', + name='actors', + field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.qualifiedbiographicalnote', verbose_name='Actors'), + ), + ] diff --git a/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py b/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py new file mode 100644 index 000000000..baa407d6f --- /dev/null +++ b/archaeological_operations/migrations/0126_archaeologicalsite_heritage_relations_datings.py @@ -0,0 +1,207 @@ +# Generated by Django 4.2.19 on 2026-03-27 12:03 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models_common +import re +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0275_authortype_parent'), + ('archaeological_context_records', '0126_migrate_periods_and_datings'), + ('archaeological_operations', '0125_archaeologicalsite_actors'), + ] + + operations = [ + migrations.AddField( + model_name='archaeologicalsite', + name='cached_current_states', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached current states label'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='cached_heritage_environmental_protections', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage and environmental protections label'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='cached_heritage_interests', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage interests label'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='current_states', + field=models.ManyToManyField(blank=True, to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='details_on_protection', + field=models.TextField(blank=True, default='', verbose_name='Details on protection'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='editors', + field=models.ManyToManyField(blank=True, related_name='sites', to='ishtar_common.author', verbose_name='Editors'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='protection_date', + field=models.DateField(blank=True, null=True, verbose_name='Protection date'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='protection_id', + field=models.TextField(blank=True, default='', verbose_name='Protection ID'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='cached_current_states', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached current states label'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='cached_heritage_environmental_protections', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage and environmental protections label'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='cached_heritage_interests', + field=models.TextField(blank=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached heritage interests label'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='details_on_protection', + field=models.TextField(blank=True, default='', verbose_name='Details on protection'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='protection_date', + field=models.DateField(blank=True, null=True, verbose_name='Protection date'), + ), + migrations.AddField( + model_name='historicalarchaeologicalsite', + name='protection_id', + field=models.TextField(blank=True, default='', verbose_name='Protection ID'), + ), + migrations.AlterField( + model_name='archaeologicalsite', + name='current_status', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sites_deprecated', to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status - deprecated'), + ), + migrations.AlterField( + model_name='historicalarchaeologicalsite', + name='current_status', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_operations.sitecurrentstatustype', verbose_name='Current status - deprecated'), + ), + migrations.CreateModel( + name='SiteRelationType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('symmetrical', models.BooleanField(verbose_name='Symmetrical')), + ('tiny_label', models.CharField(blank=True, max_length=50, null=True, verbose_name='Tiny label')), + ('logical_relation', models.CharField(blank=True, choices=[('above', 'Above'), ('below', 'Below'), ('equal', 'Equal'), ('include', 'Include'), ('included', 'Is included')], max_length=10, null=True, verbose_name='Logical relation')), + ('inverse_relation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.siterelationtype', verbose_name='Inverse relation')), + ], + options={ + 'verbose_name': 'Site relation type', + 'verbose_name_plural': 'Site relation types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models_common.Cached, models.Model), + ), + migrations.CreateModel( + name='SiteRecordRelations', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('timestamp_geo', models.IntegerField(blank=True, null=True, verbose_name='Timestamp geo')), + ('timestamp_label', models.IntegerField(blank=True, null=True, verbose_name='Timestamp label')), + ('imports', models.ManyToManyField(blank=True, related_name='imported_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Created by imports')), + ('imports_updated', models.ManyToManyField(blank=True, related_name='import_updated_%(app_label)s_%(class)s', to='ishtar_common.import', verbose_name='Updated by imports')), + ('left_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='right_relations', to='archaeological_operations.archaeologicalsite')), + ('relation_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.siterelationtype')), + ('right_record', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='left_relations', to='archaeological_operations.archaeologicalsite')), + ], + options={ + 'verbose_name': 'Site record relation', + 'verbose_name_plural': 'Site record relations', + 'ordering': ('left_record__cached_label', 'relation_type', 'right_record__cached_label'), + 'permissions': [('view_siterelation', 'Can view all Site relations')], + }, + ), + migrations.CreateModel( + name='SiteDating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4)), + ('reference', models.TextField(blank=True, default='', verbose_name='Reference')), + ('external_id', models.TextField(blank=True, default='', verbose_name='External ID')), + ('start_date', models.IntegerField(blank=True, null=True, verbose_name='Start date')), + ('end_date', models.IntegerField(blank=True, null=True, verbose_name='End date')), + ('precise_dating', models.TextField(blank=True, default='', verbose_name='Precise on this dating')), + ('dating_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.datingtype', verbose_name='Dating type')), + ('period', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.period', verbose_name='Chronological period')), + ('quality', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_context_records.datingquality', verbose_name='Quality')), + ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='datings', to='archaeological_operations.archaeologicalsite', verbose_name='Site')), + ], + options={ + 'verbose_name': 'Site dating', + 'verbose_name_plural': 'Site datings', + }, + bases=(models.Model, ishtar_common.models_common.SerializeItem), + ), + migrations.CreateModel( + name='HeritageInterestType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.heritageinteresttype', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Heritage interest type', + 'verbose_name_plural': 'Heritage interest types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models_common.Cached, models.Model), + ), + migrations.CreateModel( + name='HeritageAndEnvironmentalProtectionType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField(verbose_name='Label')), + ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), 'Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.', 'invalid')], verbose_name='Textual ID')), + ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), + ('available', models.BooleanField(default=True, verbose_name='Available')), + ('order', models.IntegerField(default=10, verbose_name='Order')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_operations.heritageandenvironmentalprotectiontype', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Heritage and environmental protection type', + 'verbose_name_plural': 'Heritage and environmental protection types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models_common.Cached, models.Model), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='heritage_environmental_protections', + field=models.ManyToManyField(blank=True, to='archaeological_operations.heritageandenvironmentalprotectiontype', verbose_name='Heritage and environmental protections'), + ), + migrations.AddField( + model_name='archaeologicalsite', + name='heritage_interests', + field=models.ManyToManyField(blank=True, to='archaeological_operations.heritageinteresttype', verbose_name='Heritage interests'), + ), + ] diff --git a/archaeological_operations/migrations/0127_data_migration_current_states.py b/archaeological_operations/migrations/0127_data_migration_current_states.py new file mode 100644 index 000000000..fe1aa5c25 --- /dev/null +++ b/archaeological_operations/migrations/0127_data_migration_current_states.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.19 on 2026-03-27 12:06 + +from django.db import migrations + + +def migrate_current_states(apps, __): + ArchaeologicalSite = apps.get_model("archaeological_operations", "archaeologicalsite") + if not hasattr(ArchaeologicalSite, "current_status"): + return + q = ArchaeologicalSite.objects.filter(current_status__isnull=False) + for site in q.all(): + site.current_states.add(site.current_status) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0126_archaeologicalsite_heritage_relations_datings'), + ] + + operations = [ + migrations.RunPython(migrate_current_states) + ] diff --git a/archaeological_operations/migrations/0128_add_editors.py b/archaeological_operations/migrations/0128_add_editors.py new file mode 100644 index 000000000..d26c47f74 --- /dev/null +++ b/archaeological_operations/migrations/0128_add_editors.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2.21 on 2026-04-02 06:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0276_add_editors'), + ('archaeological_operations', '0127_data_migration_current_states'), + ] + + operations = [ + migrations.AddField( + model_name='administrativeact', + name='editors', + field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'), + ), + migrations.AddField( + model_name='operation', + name='editors', + field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'), + ), + migrations.AddField( + model_name='parcel', + name='editors', + field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'), + ), + migrations.AddField( + model_name='parcelowner', + name='editors', + field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'), + ), + migrations.AlterField( + model_name='archaeologicalsite', + name='editors', + field=models.ManyToManyField(blank=True, related_name='%(class)s_edited', to='ishtar_common.author', verbose_name='Editors'), + ), + ] diff --git a/archaeological_operations/migrations/0129_data_migration.json b/archaeological_operations/migrations/0129_data_migration.json new file mode 100644 index 000000000..f1e341c88 --- /dev/null +++ b/archaeological_operations/migrations/0129_data_migration.json @@ -0,0 +1,396 @@ +[ + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Protections et labels patrimoniaux", + "txt_idx": "protections-et-labels-patrimoniaux", + "comment": "", + "available": true, + "parent": null, + "order": 100 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Protections environnementales", + "txt_idx": "protections-environnementales", + "comment": "", + "available": true, + "parent": null, + "order": 300 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Inscrit MH", + "txt_idx": "inscrit-mh", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 110 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Class\u00e9 MH", + "txt_idx": "classe-mh", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 120 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "P\u00e9rim\u00e8tre MH", + "txt_idx": "Perimetre-mh", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 130 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Site Patrimonial remarquable", + "txt_idx": "site-patrimonial-remarquable", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 140 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Label ACR ", + "txt_idx": "label-acr", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 150 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Label PIR", + "txt_idx": "label-pir", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 160 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Jardin remarquable ", + "txt_idx": "jardin-remarquable", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 200 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Maison des Illustres ", + "txt_idx": "maison-des-illustres", + "comment": "", + "available": true, + "parent": [ + "protections-et-labels-patrimoniaux" + ], + "order": 220 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Natura 2000", + "txt_idx": "natura-2000", + "comment": "", + "available": true, + "parent": [ + "protections-environnementales" + ], + "order": 320 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Site inscrit ", + "txt_idx": "site-inscrit", + "comment": "", + "available": true, + "parent": [ + "protections-environnementales" + ], + "order": 340 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "Site class\u00e9 ", + "txt_idx": "site-classe", + "comment": "", + "available": true, + "parent": [ + "protections-environnementales" + ], + "order": 360 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "PVAP", + "txt_idx": "pvap", + "comment": "", + "available": true, + "parent": [ + "site-patrimonial-remarquable" + ], + "order": 10 + } + }, + { + "model": "archaeological_operations.heritageandenvironmentalprotectiontype", + "fields": { + "label": "PSMV", + "txt_idx": "psmv", + "comment": "", + "available": true, + "parent": [ + "site-patrimonial-remarquable" + ], + "order": 20 + } + }, + { + "model": "archaeological_operations.heritageinteresttype", + "fields": { + "label": "Peu int\u00e9ressant", + "txt_idx": "peu-interessant", + "comment": "", + "available": true, + "parent": null, + "order": 10 + } + }, + { + "model": "archaeological_operations.heritageinteresttype", + "fields": { + "label": "Int\u00e9ressant", + "txt_idx": "interessant", + "comment": "", + "available": true, + "parent": null, + "order": 20 + } + }, + { + "model": "archaeological_operations.heritageinteresttype", + "fields": { + "label": "Tr\u00e8s int\u00e9ressant", + "txt_idx": "tres-interessant", + "comment": "", + "available": true, + "parent": null, + "order": 30 + } + }, + { + "model": "archaeological_operations.heritageinteresttype", + "fields": { + "label": "Remarquable", + "txt_idx": "remarquable", + "comment": "", + "available": true, + "parent": null, + "order": 40 + } + }, + { + "model": "archaeological_operations.heritageinteresttype", + "fields": { + "label": "\u00c0 prot\u00e9ger", + "txt_idx": "a-proteger", + "comment": "", + "available": true, + "parent": null, + "order": 50 + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Voisin de", + "txt_idx": "voisin-de", + "comment": "", + "available": true, + "order": 30, + "symmetrical": true, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Relation indirecte", + "txt_idx": "relation-indirecte", + "comment": "", + "available": true, + "order": 40, + "symmetrical": true, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Parent de", + "txt_idx": "parent-de", + "comment": "", + "available": true, + "order": 10, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Enfant de", + "txt_idx": "enfant-de", + "comment": "", + "available": true, + "order": 20, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Ant\u00e9rieure \u00e0", + "txt_idx": "anterieure-a", + "comment": "", + "available": true, + "order": 50, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Post\u00e9rieure \u00e0", + "txt_idx": "posterieure-a", + "comment": "", + "available": true, + "order": 60, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": null, + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Parent de", + "txt_idx": "parent-de", + "comment": "", + "available": true, + "order": 10, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": [ + "enfant-de" + ], + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Enfant de", + "txt_idx": "enfant-de", + "comment": "", + "available": true, + "order": 20, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": [ + "parent-de" + ], + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Ant\u00e9rieure \u00e0", + "txt_idx": "anterieure-a", + "comment": "", + "available": true, + "order": 50, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": [ + "posterieure-a" + ], + "logical_relation": null + } + }, + { + "model": "archaeological_operations.siterelationtype", + "fields": { + "label": "Post\u00e9rieure \u00e0", + "txt_idx": "posterieure-a", + "comment": "", + "available": true, + "order": 60, + "symmetrical": false, + "tiny_label": null, + "inverse_relation": [ + "anterieure-a" + ], + "logical_relation": null + } + } +] diff --git a/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py b/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py new file mode 100644 index 000000000..59a884794 --- /dev/null +++ b/archaeological_operations/migrations/0129_data_migration_heritageinterest_heritageenvprotection_relsite.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.24 on 2024-02-10 12:07 + +import os + +from django.db import migrations +from django.core.management import call_command + + +def load_data(apps, __): + QualifiedBiographicalNoteType = apps.get_model("archaeological_operations", "HeritageInterestType") + if not QualifiedBiographicalNoteType.objects.count(): + json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + ["0129_data_migration.json"]) + call_command("loaddata", json_path) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_operations', '0128_add_editors'), + ] + + operations = [ + migrations.RunPython(load_data) + ] |
