diff options
Diffstat (limited to 'archaeological_warehouse/serializers.py')
| -rw-r--r-- | archaeological_warehouse/serializers.py | 41 | 
1 files changed, 21 insertions, 20 deletions
| diff --git a/archaeological_warehouse/serializers.py b/archaeological_warehouse/serializers.py index 904126b32..38ebf4342 100644 --- a/archaeological_warehouse/serializers.py +++ b/archaeological_warehouse/serializers.py @@ -14,19 +14,20 @@ WAREHOUSE_MODEL_LIST = [  def generate_warehouse_queryset(base_query_key, ids): -    warehouse_division_q, warehouse_q, container_q = None, None, None -    container_loca_q = None +    container_ids, warehouse_ids = set(), set() +    warehouse_div_ids, container_loca_ids = set(), set() +      for find_key in ("finds", "finds_ref"):          base_key = "{}__{}".format(find_key, base_query_key)          q = Q(**{base_key: ids}) +        container_ids.update( +            list(models.Container.objects.filter( +                q).values_list("id", flat=True)))          q_loca = Q(              **{"container__{}__{}".format(find_key, base_query_key): ids}) -        if not container_q: -            container_q = q -            container_loca_q = q_loca -        else: -            container_q |= q -            container_loca_q |= q_loca +        container_loca_ids.update( +            list(models.ContainerLocalisation.objects.filter( +                q_loca).values_list("id", flat=True)))          for container_key in ("containers", "owned_containers"):              q = Q(**                    {"{}__{}__{}".format(container_key, find_key, @@ -34,23 +35,23 @@ def generate_warehouse_queryset(base_query_key, ids):              q_div = Q(**                        {"warehouse__{}__{}__{}".format(                            container_key, find_key, base_query_key): ids}) -            if not warehouse_q: -                warehouse_q = q -                warehouse_division_q = q_div -            else: -                warehouse_q |= q -                warehouse_division_q |= q_div +            warehouse_ids.update( +                list(models.Warehouse.objects.filter(q).values_list( +                    "id", flat=True))) +            warehouse_div_ids.update( +                list(models.WarehouseDivision.objects.filter(q_div).values_list( +                    "id", flat=True)))      result_queryset = {          models.Warehouse.__name__: -            models.Warehouse.objects.filter(warehouse_q), +            models.Warehouse.objects.filter(id__in=warehouse_ids),          models.Container.__name__: -            models.Container.objects.filter(container_q), +            models.Container.objects.filter(id__in=container_ids),          models.WarehouseDivisionLink.__name__:              models.WarehouseDivisionLink.objects.filter( -                warehouse_division_q), +                id__in=warehouse_div_ids),          models.ContainerLocalisation.__name__:              models.ContainerLocalisation.objects.filter( -                container_loca_q) +                id__in=container_loca_ids)      }      return result_queryset @@ -59,7 +60,7 @@ def warehouse_serialization(archive=False, return_empty_types=False,                              archive_name=None, operation_queryset=None,                              site_queryset=None, cr_queryset=None,                              find_queryset=None, warehouse_queryset=None, -                            get_queryset=False): +                            get_queryset=False, no_geo=True):      result_queryset = {}      if operation_queryset:          operation_ids = operation_queryset.values_list("id", flat=True) @@ -98,7 +99,7 @@ def warehouse_serialization(archive=False, return_empty_types=False,      if get_queryset:          return result_queryset      result = generic_get_results(WAREHOUSE_MODEL_LIST, "warehouse", -                                 result_queryset=result_queryset) +                                 result_queryset=result_queryset, no_geo=no_geo)      full_archive = archive_serialization(          result, archive_dir="warehouse", archive=archive,          return_empty_types=return_empty_types, archive_name=archive_name, | 
