summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-04 15:30:47 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-04 15:30:47 +0200
commit303a95a0cdbeb2d64b8a3fdf5143bcdbcec22270 (patch)
tree52de5ad50bc11287bb119563043f6153e596d9b4
parent6f487e1b480365ff4a64500dc40ff2da6d92d5b2 (diff)
downloadIshtar-303a95a0cdbeb2d64b8a3fdf5143bcdbcec22270.tar.bz2
Ishtar-303a95a0cdbeb2d64b8a3fdf5143bcdbcec22270.zip
Serializers: operations - manage recordrelation filter
-rw-r--r--archaeological_operations/models.py8
-rw-r--r--archaeological_operations/serializers.py20
-rw-r--r--archaeological_operations/tests.py10
-rw-r--r--ishtar_common/model_managers.py5
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)