diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-20 11:52:46 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-20 15:47:14 +0200 |
commit | 2089f69b8958ba08879a706d478397e927de8741 (patch) | |
tree | b3f0047a4d78e10e9bcff258e1f7cbe1e9a44372 /archaeological_finds | |
parent | 14b2433f8b04d11c2c3ad721997289ffa0777de3 (diff) | |
download | Ishtar-2089f69b8958ba08879a706d478397e927de8741.tar.bz2 Ishtar-2089f69b8958ba08879a706d478397e927de8741.zip |
🗃️ context records, finds: new fields in database
Context record:
- excavator
Find:
- discovery method
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/admin.py | 2 | ||||
-rw-r--r-- | archaeological_finds/migrations/0129_discovery_method.py | 50 | ||||
-rw-r--r-- | archaeological_finds/migrations/0130_data_discovery_method.json | 35 | ||||
-rw-r--r-- | archaeological_finds/migrations/0130_data_discovery_method.py | 23 | ||||
-rw-r--r-- | archaeological_finds/models.py | 2 | ||||
-rw-r--r-- | archaeological_finds/models_finds.py | 20 |
6 files changed, 129 insertions, 3 deletions
diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index b089e0713..b616b3dc7 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -242,7 +242,7 @@ general_models = [ models.CollectionEntryModeType, models.IntegrityType, models.InventoryConformity, models.InventoryMarkingPresence, models.MarkingType, models.MaterialTypeQualityType, models.MuseumCollection, models.ObjectTypeQualityType, models.OriginalReproduction, - models.RemarkabilityType, models.TreatmentEmergencyType, + models.RemarkabilityType, models.TreatmentEmergencyType, models.DiscoveryMethod, ] for model in general_models: diff --git a/archaeological_finds/migrations/0129_discovery_method.py b/archaeological_finds/migrations/0129_discovery_method.py new file mode 100644 index 000000000..94af962af --- /dev/null +++ b/archaeological_finds/migrations/0129_discovery_method.py @@ -0,0 +1,50 @@ +# Generated by Django 2.2.24 on 2024-09-20 12:38 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import ishtar_common.models_common +import re + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0128_find_first_full_location'), + ] + + operations = [ + migrations.AlterField( + model_name='findtreatment', + name='location_type', + field=models.CharField(choices=[['C', 'Current'], ['R', 'Reference'], ['B', 'Reference/current']], default='C', max_length=1, verbose_name='Location type'), + ), + migrations.CreateModel( + name='DiscoveryMethod', + 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_finds.DiscoveryMethod', verbose_name='Parent')), + ], + options={ + 'verbose_name': 'Discovery method type', + 'verbose_name_plural': 'Discovery method types', + 'ordering': ('order', 'label'), + }, + bases=(ishtar_common.models_common.Cached, models.Model), + ), + migrations.AddField( + model_name='basefind', + name='discovery_method', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='archaeological_finds.DiscoveryMethod', verbose_name='Discovery method'), + ), + migrations.AddField( + model_name='historicalbasefind', + name='discovery_method', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='archaeological_finds.DiscoveryMethod', verbose_name='Discovery method'), + ), + ] diff --git a/archaeological_finds/migrations/0130_data_discovery_method.json b/archaeological_finds/migrations/0130_data_discovery_method.json new file mode 100644 index 000000000..8d7994f5a --- /dev/null +++ b/archaeological_finds/migrations/0130_data_discovery_method.json @@ -0,0 +1,35 @@ +[ +{ + "model": "archaeological_finds.discoverymethod", + "fields": { + "label": "Fouille", + "txt_idx": "fouille", + "comment": "", + "available": true, + "order": 10, + "parent": null + } +}, +{ + "model": "archaeological_finds.discoverymethod", + "fields": { + "label": "Tamisage", + "txt_idx": "tamisage", + "comment": "", + "available": true, + "order": 20, + "parent": null + } +}, +{ + "model": "archaeological_finds.discoverymethod", + "fields": { + "label": "Flottation", + "txt_idx": "flottation", + "comment": "", + "available": true, + "order": 30, + "parent": null + } +} +] diff --git a/archaeological_finds/migrations/0130_data_discovery_method.py b/archaeological_finds/migrations/0130_data_discovery_method.py new file mode 100644 index 000000000..56a1efb1f --- /dev/null +++ b/archaeological_finds/migrations/0130_data_discovery_method.py @@ -0,0 +1,23 @@ +import os + +from django.db import migrations +from django.core.management import call_command + + +def load_data(apps, __): + DiscoveryMethod = apps.get_model("archaeological_finds", "discoverymethod") + if not DiscoveryMethod.objects.count(): + migration = "0130_data_discovery_method.json" + json_path = os.sep.join(os.path.abspath(__file__).split(os.sep)[:-1] + [migration]) + call_command("loaddata", json_path) + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_finds', '0129_discovery_method'), + ] + + operations = [ + migrations.RunPython(load_data) + ] diff --git a/archaeological_finds/models.py b/archaeological_finds/models.py index ede0ff2ba..ce2098d8d 100644 --- a/archaeological_finds/models.py +++ b/archaeological_finds/models.py @@ -8,6 +8,7 @@ from archaeological_finds.models_finds import ( CollectionEntryModeType, CommunicabilityType, ConservatoryState, + DiscoveryMethod, FBulkView, Find, FindBasket, @@ -55,6 +56,7 @@ __all__ = [ "CollectionEntryModeType", "CommunicabilityType", "ConservatoryState", + "DiscoveryMethod", "FBulkView", "Find", "FirstBaseFindView", diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 7da45166e..42b1aa514 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -416,6 +416,20 @@ post_save.connect(post_save_cache, sender=CheckedType) post_delete.connect(post_save_cache, sender=CheckedType) +class DiscoveryMethod(OrderedHierarchicalType): + class Meta: + verbose_name = _("Discovery method type") + verbose_name_plural = _("Discovery method types") + ordering = ( + "order", + "label", + ) + ADMIN_SECTION = _("Finds") + +post_save.connect(post_save_cache, sender=DiscoveryMethod) +post_delete.connect(post_save_cache, sender=DiscoveryMethod) + + class CollectionEntryModeType(OrderedHierarchicalType): class Meta: verbose_name = _("Collection entry mode type") @@ -507,8 +521,6 @@ post_save.connect(post_save_cache, sender=OriginalReproduction) post_delete.connect(post_save_cache, sender=OriginalReproduction) - - class BFBulkView(object): CREATE_SQL = """ CREATE VIEW basefind_cached_bulk_update @@ -568,6 +580,10 @@ class BaseFind( discovery_date_taq = models.DateField( _("Discovery date (end)"), blank=True, null=True ) + discovery_method = models.ForeignKey( + DiscoveryMethod, blank=True, null=True, + on_delete=models.SET_NULL, verbose_name=_("Discovery method") + ) batch = models.ForeignKey( BatchType, verbose_name=_("Batch/object"), |