diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-09 00:05:51 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-09 00:05:51 +0200 | 
| commit | 344c17b51e13a273e8b6e80d67cfa112d1ea6926 (patch) | |
| tree | 00c30cef25b67be3bf7bd788af800806259b5bc1 /archaeological_context_records/serializers.py | |
| parent | 76b5d6bf028389be2e9ac421478b868c4f5e7899 (diff) | |
| download | Ishtar-344c17b51e13a273e8b6e80d67cfa112d1ea6926.tar.bz2 Ishtar-344c17b51e13a273e8b6e80d67cfa112d1ea6926.zip  | |
Serialization: manage export action in admin - optimizations
Diffstat (limited to 'archaeological_context_records/serializers.py')
| -rw-r--r-- | archaeological_context_records/serializers.py | 38 | 
1 files changed, 35 insertions, 3 deletions
diff --git a/archaeological_context_records/serializers.py b/archaeological_context_records/serializers.py index d10d8fcd4..9f454eb35 100644 --- a/archaeological_context_records/serializers.py +++ b/archaeological_context_records/serializers.py @@ -3,7 +3,10 @@ from django.db.models import Q  from ishtar_common.serializers_utils import generic_get_results, \      archive_serialization  from archaeological_context_records import models +from archaeological_finds.models import Find +from archaeological_finds.serializers import generate_warehouse_queryset \ +    as finds_generate_warehouse_queryset  CR_MODEL_LIST = [      models.Dating, models.ContextRecord, models.RecordRelations @@ -46,8 +49,9 @@ def generate_warehouse_queryset(ids):  def cr_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): +                     warehouse_queryset=None, get_queryset=False, no_geo=True):      result_queryset = {} +    find_ids, cr_ids = None, None      if operation_queryset:          operation_ids = operation_queryset.values_list("id", flat=True)          result_queryset = { @@ -58,8 +62,15 @@ def cr_serialization(archive=False, return_empty_types=False,                  models.RecordRelations.objects.filter(                      left_record__operation_id__in=operation_ids,                      right_record__operation_id__in=operation_ids, -                ) +                ),          } +        cr_ids = list( +            result_queryset[models.ContextRecord.__name__].values_list( +                "id", flat=True)) +        find_ids = list( +            Find.objects.filter( +                base_finds__context_record__operation_id__in=operation_ids +            ).values_list("id", flat=True))      elif site_queryset:          site_ids = site_queryset.values_list("id", flat=True)          result_queryset = { @@ -72,6 +83,11 @@ def cr_serialization(archive=False, return_empty_types=False,                      right_record__operation__archaeological_sites__id__in=site_ids,                  )          } +        f_q = { +            "base_finds__context_record__operation__archaeological_sites__id__in": site_ids +        } +        find_ids = list( +            Find.objects.filter(**f_q).values_list("id", flat=True))      elif cr_queryset:          cr_ids = cr_queryset.values_list("id", flat=True)          result_queryset = { @@ -82,6 +98,10 @@ def cr_serialization(archive=False, return_empty_types=False,                      right_record_id__in=cr_ids,                  )          } +        find_ids = list( +            Find.objects.filter( +                base_finds__context_record__in=cr_ids).values_list( +                "id", flat=True))      elif find_queryset:          find_ids = find_queryset.values_list("id", flat=True)          result_queryset = { @@ -97,11 +117,23 @@ def cr_serialization(archive=False, return_empty_types=False,      elif warehouse_queryset:          warehouse_ids = warehouse_queryset.values_list("id", flat=True)          result_queryset = generate_warehouse_queryset(warehouse_ids) +        w_queryset = finds_generate_warehouse_queryset(warehouse_ids) +        find_ids = w_queryset[Find.__name__].values_list("id", flat=True) + +    if result_queryset: +        cr_ids = list( +            result_queryset[models.ContextRecord.__name__].values_list( +                "id", flat=True)) +        result_queryset[models.Dating.__name__] = models.Dating.objects.filter( +            Q(context_records__id__in=cr_ids) | +            Q(find__id__in=list(find_ids)) +        ) +      if get_queryset:          return result_queryset      result = generic_get_results(CR_MODEL_LIST, "context_records", -                                 result_queryset=result_queryset) +                                 result_queryset=result_queryset, no_geo=no_geo)      full_archive = archive_serialization(          result, archive_dir="context_records", archive=archive,          return_empty_types=return_empty_types, archive_name=archive_name,  | 
