diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-06 14:13:57 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-06 14:13:57 +0200 |
commit | 438bbe785549557c5c7f6073f486b5189808eb87 (patch) | |
tree | 4225584926880f883d52b320e3533ef0311ab428 /archaeological_warehouse/serializers.py | |
parent | a81fecad08c628e001357f085880cd10c918649d (diff) | |
download | Ishtar-438bbe785549557c5c7f6073f486b5189808eb87.tar.bz2 Ishtar-438bbe785549557c5c7f6073f486b5189808eb87.zip |
Serializers: manage operation filter for warehouse
Diffstat (limited to 'archaeological_warehouse/serializers.py')
-rw-r--r-- | archaeological_warehouse/serializers.py | 52 |
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( |