diff options
-rw-r--r-- | archaeological_operations/models.py | 8 | ||||
-rw-r--r-- | archaeological_operations/serializers.py | 20 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 10 | ||||
-rw-r--r-- | ishtar_common/model_managers.py | 5 |
4 files changed, 32 insertions, 11 deletions
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 8f5f1aace..7a5174743 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -42,6 +42,7 @@ from ishtar_common.models import BaseHistorizedItem, Dashboard, \ ShortMenuItem, SourceType, Town, ValueGetter, get_current_profile, \ document_attached_changed, HistoryModel, SearchAltName, \ GeoItem, QRCodeItem, SearchVectorConfig, DocumentItem, QuickAction, MainItem +from ishtar_common.model_managers import UUIDModelManager from ishtar_common.utils import cached_label_changed, \ force_cached_label_changed, mode, m2m_historization_changed, post_save_geo @@ -579,11 +580,6 @@ class ClosedItem(object): return {'date': date, 'user': user} -class OperationManager(models.GeoManager): - def get_by_natural_key(self, uuid): - return self.get(uuid=uuid) - - class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem, GeoItem, OwnPerms, ValueGetter, MainItem, DashboardFormItem, RelationItem): @@ -721,7 +717,7 @@ class Operation(ClosedItem, DocumentItem, BaseHistorizedItem, QRCodeItem, } CACHED_LABELS = ['cached_label', 'cached_towns_label', 'cached_periods', 'cached_remains'] - objects = OperationManager() + objects = UUIDModelManager() # alternative names of fields for searches ALT_NAMES = { diff --git a/archaeological_operations/serializers.py b/archaeological_operations/serializers.py index 0826a23ce..3500cdad2 100644 --- a/archaeological_operations/serializers.py +++ b/archaeological_operations/serializers.py @@ -7,26 +7,38 @@ OPERATION_MODEL_LIST = [ models.Parcel, models.ParcelOwner ] +# TODO: administrativ acts, associated documents + def operation_serialization(archive=False, return_empty_types=False, archive_name=None, operation_queryset=None, site_queryset=None): result_queryset = {} if operation_queryset: + operation_ids = operation_queryset.values_list("id", flat=True) result_queryset = { models.Operation.__name__: operation_queryset, + models.RecordRelations.__name__: + models.RecordRelations.objects.filter( + left_record__id__in=operation_ids, + right_record__id__in=operation_ids, + ), models.ArchaeologicalSite.__name__: models.ArchaeologicalSite.objects.filter( - operations__id__in=operation_queryset.values_list( - "id", flat=True) + operations__id__in=operation_ids ) } elif site_queryset: + site_ids = site_queryset.values_list("id", flat=True) result_queryset = { models.ArchaeologicalSite.__name__: site_queryset, models.Operation.__name__: models.Operation.objects.filter( - archaeological_sites__id__in=site_queryset.values_list( - "id", flat=True)) + archaeological_sites__id__in=site_ids), + models.RecordRelations.__name__: + models.RecordRelations.objects.filter( + left_record__archaeological_sites__id__in=site_ids, + right_record__archaeological_sites__id__in=site_ids, + ), } result = generic_get_results(OPERATION_MODEL_LIST, "operations", diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index 17d112559..82f30855c 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -789,6 +789,10 @@ class SerializationTest(GenericSerializationTest, TestCase): res[('operations', 'archaeological_operations__ArchaeologicalSite')] ) self.assertEqual(len(site_json), 1) + rel_json = json.loads( + res[('operations', 'archaeological_operations__RecordRelation')] + ) + self.assertEqual(len(rel_json), 0) result_queryset = models.Operation.objects.filter( code_patriarche="66667") @@ -804,8 +808,12 @@ class SerializationTest(GenericSerializationTest, TestCase): res[('operations', 'archaeological_operations__ArchaeologicalSite')] ) self.assertEqual(len(site_json), 0) + rel_json = json.loads( + res[('operations', 'archaeological_operations__RecordRelation')] + ) + self.assertEqual(len(rel_json), 0) - def test_conf_restore(self): + def test_restore(self): current_number, zip_filename = self.generic_restore_test_genzip( serializers.OPERATION_MODEL_LIST, serializers.operation_serialization) diff --git a/ishtar_common/model_managers.py b/ishtar_common/model_managers.py index ae0264ced..1857b2079 100644 --- a/ishtar_common/model_managers.py +++ b/ishtar_common/model_managers.py @@ -18,3 +18,8 @@ class TypeManager(Manager): class SlugModelManager(Manager): def get_by_natural_key(self, slug): return self.get(slug=slug) + + +class UUIDModelManager(Manager): + def get_by_natural_key(self, uuid): + return self.get(uuid=uuid) |