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