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) | 
