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 | 51f31dd7dfd62c2d9de75e83ccf1727190514157 (patch) | |
tree | 00c30cef25b67be3bf7bd788af800806259b5bc1 /archaeological_context_records | |
parent | 647546deffb5152cebbaed3b0bf5bed309d59fc5 (diff) | |
download | Ishtar-51f31dd7dfd62c2d9de75e83ccf1727190514157.tar.bz2 Ishtar-51f31dd7dfd62c2d9de75e83ccf1727190514157.zip |
Serialization: manage export action in admin - optimizations
Diffstat (limited to 'archaeological_context_records')
-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, |