summaryrefslogtreecommitdiff
path: root/archaeological_warehouse/serializers.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_warehouse/serializers.py')
-rw-r--r--archaeological_warehouse/serializers.py52
1 files changed, 42 insertions, 10 deletions
diff --git a/archaeological_warehouse/serializers.py b/archaeological_warehouse/serializers.py
index 888c7d33f..9a49d5acf 100644
--- a/archaeological_warehouse/serializers.py
+++ b/archaeological_warehouse/serializers.py
@@ -1,4 +1,6 @@
-from ishtar_common.serializers import generic_get_results, archive_serialization
+from django.db.models import Q
+from ishtar_common.serializers import generic_get_results, \
+ archive_serialization
from archaeological_warehouse import models
@@ -14,18 +16,49 @@ WAREHOUSE_MODEL_LIST = [
def warehouse_serialization(archive=False, return_empty_types=False,
archive_name=None, operation_queryset=None,
site_queryset=None, cr_queryset=None,
- find_queryset=None):
+ find_queryset=None, warehouse_queryset=None):
result_queryset = {}
- """
if operation_queryset:
operation_ids = operation_queryset.values_list("id", flat=True)
+ base_query_key = "base_finds__context_record__operation_id__in"
+ warehouse_division_q, warehouse_q, container_q = None, None, None
+ container_loca_q = None
+ for find_key in ("finds", "finds_ref"):
+ q = Q(**{"{}__{}".format(find_key, base_query_key): operation_ids})
+ q_loca = Q(
+ **{"container__{}__{}".format(find_key, base_query_key):
+ operation_ids})
+ if not container_q:
+ container_q = q
+ container_loca_q = q_loca
+ else:
+ container_q |= q
+ container_loca_q |= q_loca
+ for container_key in ("containers", "owned_containers"):
+ q = Q(**
+ {"{}__{}__{}".format(container_key, find_key,
+ base_query_key): operation_ids})
+ q_div = Q(**
+ {"warehouse__{}__{}__{}".format(
+ container_key, find_key, base_query_key):
+ operation_ids})
+ if not warehouse_q:
+ warehouse_q = q
+ warehouse_division_q = q_div
+ else:
+ warehouse_q |= q
+ warehouse_division_q |= q_div
result_queryset = {
- models.BaseFind.__name__:
- models.BaseFind.objects.filter(
- context_record__operation_id__in=operation_ids),
- models.Find.__name__:
- models.Find.objects.filter(
- base_finds__context_record__operation_id__in=operation_ids),
+ models.Warehouse.__name__:
+ models.Warehouse.objects.filter(warehouse_q),
+ models.Container.__name__:
+ models.Container.objects.filter(container_q),
+ models.WarehouseDivisionLink.__name__:
+ models.WarehouseDivisionLink.objects.filter(
+ warehouse_division_q),
+ models.ContainerLocalisation.__name__:
+ models.ContainerLocalisation.objects.filter(
+ container_loca_q)
}
elif site_queryset:
sites = site_queryset.values_list("id", flat=True)
@@ -57,7 +90,6 @@ def warehouse_serialization(archive=False, return_empty_types=False,
find__id__in=find_ids),
models.Find.__name__: find_queryset,
}
- """
result = generic_get_results(WAREHOUSE_MODEL_LIST, "warehouse",
result_queryset=result_queryset)
full_archive = archive_serialization(