summaryrefslogtreecommitdiff
path: root/archaeological_context_records/serializers.py
diff options
context:
space:
mode:
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
commit51f31dd7dfd62c2d9de75e83ccf1727190514157 (patch)
tree00c30cef25b67be3bf7bd788af800806259b5bc1 /archaeological_context_records/serializers.py
parent647546deffb5152cebbaed3b0bf5bed309d59fc5 (diff)
downloadIshtar-51f31dd7dfd62c2d9de75e83ccf1727190514157.tar.bz2
Ishtar-51f31dd7dfd62c2d9de75e83ccf1727190514157.zip
Serialization: manage export action in admin - optimizations
Diffstat (limited to 'archaeological_context_records/serializers.py')
-rw-r--r--archaeological_context_records/serializers.py38
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,