diff options
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(  | 
