diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-27 17:31:00 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-01-27 17:31:00 +0100 |
commit | dc1d0da3544d2ec9adb4c792c357fe06eaf752a7 (patch) | |
tree | dc2627a86507fe03bf42b21bcc5fe21183573cf4 /archaeological_context_records | |
parent | e448e19f9a472f8bb9ce41b085d175e91e0b873b (diff) | |
download | Ishtar-dc1d0da3544d2ec9adb4c792c357fe06eaf752a7.tar.bz2 Ishtar-dc1d0da3544d2ec9adb4c792c357fe06eaf752a7.zip |
Add custom cached_label configuration for each main item
Diffstat (limited to 'archaeological_context_records')
-rw-r--r-- | archaeological_context_records/migrations/0111_auto_20230127_1503.py | 54 | ||||
-rw-r--r-- | archaeological_context_records/models.py | 25 | ||||
-rw-r--r-- | archaeological_context_records/tests.py | 26 |
3 files changed, 101 insertions, 4 deletions
diff --git a/archaeological_context_records/migrations/0111_auto_20230127_1503.py b/archaeological_context_records/migrations/0111_auto_20230127_1503.py new file mode 100644 index 000000000..b1d36254c --- /dev/null +++ b/archaeological_context_records/migrations/0111_auto_20230127_1503.py @@ -0,0 +1,54 @@ +# Generated by Django 2.2.24 on 2023-01-27 15:03 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('archaeological_context_records', '0110_auto_20221017_1435'), + ] + + operations = [ + migrations.AlterField( + model_name='contextrecord', + name='cached_label', + field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'), + ), + migrations.AlterField( + model_name='contextrecord', + name='excavation_technics', + field=models.ManyToManyField(blank=True, related_name='context_records', to='archaeological_context_records.ExcavationTechnicType', verbose_name='Excavation techniques'), + ), + migrations.AlterField( + model_name='contextrecord', + name='geodata', + field=models.ManyToManyField(blank=True, related_name='related_items_archaeological_context_records_contextrecord', to='ishtar_common.GeoVectorData', verbose_name='Geodata'), + ), + migrations.AlterField( + model_name='contextrecord', + name='main_geodata', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_archaeological_context_records_contextrecord', to='ishtar_common.GeoVectorData', verbose_name='Main geodata'), + ), + migrations.AlterField( + model_name='dating', + name='period', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='archaeological_operations.Period', verbose_name='Chronological period'), + ), + migrations.AlterField( + model_name='dating', + name='precise_dating', + field=models.TextField(blank=True, default='', verbose_name='Precise on dating'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='cached_label', + field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'), + ), + migrations.AlterField( + model_name='historicalcontextrecord', + name='main_geodata', + field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.GeoVectorData', verbose_name='Main geodata'), + ), + ] diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 074bc3358..bfdda4bfe 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -838,9 +838,6 @@ class ContextRecord( blank=True, null=True, ) - cached_label = models.TextField( - _("Cached name"), blank=True, default="", db_index=True - ) cached_periods = models.TextField( _("Cached periods label"), blank=True, @@ -997,6 +994,25 @@ class ContextRecord( def cached_label_bulk_update( cls, operation_id=None, parcel_id=None, transaction_id=None ): + profile = get_current_profile() + if profile.contextrecord_cached_label: + # no bulk possible + q = cls.objects + if operation_id: + q = q.filter(operation_id=operation_id) + elif parcel_id: + q = q.filter(parcel_id=parcel_id) + else: + return + for cr in q.all(): + cr.skip_history_when_saving = True + cr._no_move = True + cr.save() + cls._meta.get_field("base_finds").related_model.cached_label_bulk_update( + operation_id=operation_id, parcel_id=parcel_id, + transaction_id=transaction_id + ) + return transaction_id, is_recursion = cls.bulk_recursion( transaction_id, [operation_id, parcel_id] ) @@ -1186,6 +1202,9 @@ class ContextRecord( ) def _generate_cached_label(self): + label = self._profile_generate_cached_label() + if label: + return label return self.full_label() def _generate_cached_periods(self): diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index f0b12e0d6..28aa2208b 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -27,7 +27,7 @@ from django.conf import settings from django.contrib.auth.models import Permission from django.core.exceptions import ValidationError, ImproperlyConfigured from django.core.files.uploadedfile import SimpleUploadedFile -from django.test import tag +from django.template.defaultfilters import slugify from django.test.client import Client from django.urls import reverse from django.utils.translation import pgettext_lazy @@ -438,6 +438,30 @@ class ContextRecordTest(ContextRecordInit, TestCase): self.assertIsNotNone(cr.cached_label) self.assertIn(profile.operation_prefix.lower() + "patriarch", cr.search_vector) + def test_custom_cached_label(self): + profile, created = IshtarSiteProfile.objects.get_or_create( + slug="default", active=True + ) + profile.contextrecord_cached_label = \ + "OA{operation__code_patriarche}-{label|slug:0>7}" + profile.save() + cr1 = self.context_records[0] + cr1 = models.ContextRecord.objects.get(pk=cr1.pk) + cr1.save() + cr1 = models.ContextRecord.objects.get(pk=cr1.pk) + code_patriarche = cr1.operation.code_patriarche + label = slugify(cr1.label) + # label = "CR 1" - code patriarche = "1" + # -> OA1-000cr-1 + expected_lbl = f"OA{code_patriarche}-{label:0>7}" + self.assertEqual(cr1.cached_label, expected_lbl) + # test cascade update + cr1.operation.code_patriarche = "666" + cr1.operation.save() + cr1 = models.ContextRecord.objects.get(pk=cr1.pk) + expected_lbl = f"OA666-{label:0>7}" + self.assertEqual(cr1.cached_label, expected_lbl) + def test_upstream_cache_update(self): cr = self.create_context_record()[0] cr_pk = cr.pk |