summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/serializers.py41
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,