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 | 
