diff options
Diffstat (limited to 'archaeological_finds/serializers.py')
-rw-r--r-- | archaeological_finds/serializers.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/archaeological_finds/serializers.py b/archaeological_finds/serializers.py new file mode 100644 index 000000000..5fc8d2224 --- /dev/null +++ b/archaeological_finds/serializers.py @@ -0,0 +1,55 @@ +from ishtar_common.serializers import generic_get_results, archive_serialization +from archaeological_finds import models + + +FIND_MODEL_LIST = [ + models.BaseFind, models.Find +] + +# TODO: associated documents, property, findbasket + + +def find_serialization(archive=False, return_empty_types=False, + archive_name=None, operation_queryset=None, + site_queryset=None, cr_queryset=None): + result_queryset = {} + if operation_queryset: + operation_ids = operation_queryset.values_list("id", flat=True) + 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), + } + elif site_queryset: + sites = site_queryset.values_list("id", flat=True) + f_q = { + "base_finds__context_record__operation__archaeological_site_id__in": sites + } + result_queryset = { + models.BaseFind.__name__: + models.BaseFind.objects.filter( + context_record__operation__archaeological_site_id__in=sites + ), + models.Find.__name__: + models.Find.objects.filter(**f_q), + } + elif cr_queryset: + cr_ids = cr_queryset.values_list("id", flat=True) + result_queryset = { + models.BaseFind.__name__: + models.BaseFind.objects.filter( + context_record__in=cr_ids), + models.Find.__name__: + models.Find.objects.filter( + base_finds__context_record__in=cr_ids), + } + result = generic_get_results(FIND_MODEL_LIST, "finds", + result_queryset=result_queryset) + full_archive = archive_serialization( + result, archive_dir="operations", archive=archive, + return_empty_types=return_empty_types, archive_name=archive_name, + ) + return full_archive |