From a7bb4ddcaa357399cf2ce001b2233b60a22baa58 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 29 Mar 2023 15:01:29 -0400 Subject: [PATCH] Add ImageSerializer --- program/serializers.py | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/program/serializers.py b/program/serializers.py index 8ec1d823..21f4b476 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -30,6 +30,7 @@ from program.models import ( FundingCategory, Host, HostLink, + Image, Language, LicenseType, LinkType, @@ -209,6 +210,55 @@ class ThumbnailsMixin: return thumbnails +class ImageSerializer(serializers.ModelSerializer): + thumbnails = serializers.SerializerMethodField() + + @staticmethod + def get_thumbnails(instance) -> List[str]: + """Returns thumbnails""" + thumbnails = [] + + if instance.image.name and THUMBNAIL_SIZES: + for size in THUMBNAIL_SIZES: + thumbnails.append(instance.image.crop[size].name) + + return thumbnails + + class Meta: + model = Image + read_only_fields = ( + "height", + "id", + "ppoi", + "thumbnails", + "width", + ) + fields = ( + "alt_text", + "credits", + "image", + ) + read_only_fields + + def create(self, validated_data): + """Create and return a new Image instance, given the validated data.""" + + image = Image.objects.create(**validated_data | self.context) + image.save() + + return image + + def update(self, instance, validated_data): + """Update and return an existing Image instance, given the validated data.""" + + # Only alt_text and credits can be updated. + instance.alt_text = validated_data.get("alt_text", instance.alt_text) + instance.credits = validated_data.get("credits", instance.credits) + + instance.save() + + return instance + + class HostSerializer(ThumbnailsMixin, serializers.ModelSerializer): links = HostLinkSerializer(many=True, required=False) thumbnails = serializers.SerializerMethodField() -- GitLab