From 4ec4abac4426b59f19d210dfe8e40c269c197c8d Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 6 Sep 2023 23:10:16 -0400 Subject: [PATCH] feat: add tags field to NoteSerializer --- program/serializers.py | 57 +++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index 0d97654d..11d72b42 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -324,8 +324,11 @@ class HostSerializer(serializers.ModelSerializer): Create and return a new Host instance, given the validated data. """ + # optional inline links_data = validated_data.pop("links", []) + # optional many-to-many owners = validated_data.pop("owners", []) + # optional foreign key validated_data["image"] = validated_data.pop("image_id", None) host = Host.objects.create( @@ -358,7 +361,8 @@ class HostSerializer(serializers.ModelSerializer): for link_data in links_data: HostLink.objects.create(host=instance, **link_data) - instance.owners.set(validated_data.get("owners", instance.owners)) + if owners := validated_data.get("owners", []): + instance.owners.set(owners) instance.updated_by = self.context.get("request").user.username @@ -476,19 +480,22 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): Create and return a new Show instance, given the validated data. """ - owners = validated_data.pop("owners") + # required many-to-many category = validated_data.pop("category") hosts = validated_data.pop("hosts") language = validated_data.pop("language") - topic = validated_data.pop("topic") music_focus = validated_data.pop("music_focus") + owners = validated_data.pop("owners") + topic = validated_data.pop("topic") + + # optional many-to-many links_data = validated_data.pop("links", []) - # required + # required foreign key validated_data["funding_category"] = validated_data.pop("funding_category_id") validated_data["type"] = validated_data.pop("type_id") - # optional + # optional foreign key validated_data["image"] = validated_data.pop("image_id", None) validated_data["logo"] = validated_data.pop("logo_id", None) validated_data["predecessor"] = validated_data.pop("predecessor_id", None) @@ -499,12 +506,12 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): ) # Save many-to-many relationships - show.owners.set(owners) show.category.set(category) show.hosts.set(hosts) show.language.set(language) - show.topic.set(topic) show.music_focus.set(music_focus) + show.owners.set(owners) + show.topic.set(topic) for link_data in links_data: ShowLink.objects.create(show=show, **link_data) @@ -540,12 +547,23 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): instance.slug = validated_data.get("slug", instance.slug) instance.type = validated_data.get("type_id", instance.type) - instance.category.set(validated_data.get("category", instance.category)) - instance.hosts.set(validated_data.get("hosts", instance.hosts)) - instance.language.set(validated_data.get("language", instance.language)) - instance.music_focus.set(validated_data.get("music_focus", instance.music_focus)) - instance.owners.set(validated_data.get("owners", instance.owners)) - instance.topic.set(validated_data.get("topic", instance.topic)) + if category := validated_data.get("category"): + instance.category.set(category) + + if hosts := validated_data.get("hosts"): + instance.hosts.set(hosts) + + if language := validated_data.get("language"): + instance.language.set(language) + + if music_focus := validated_data.get("music_focus"): + instance.music_focus.set(music_focus) + + if owners := validated_data.get("owners"): + instance.owners.set(owners) + + if topic := validated_data.get("topic"): + instance.topic.set(topic) if links_data := validated_data.get("links"): instance = delete_links(instance) @@ -772,8 +790,11 @@ class TimeSlotSerializer(serializers.ModelSerializer): instance.repetition_of = validated_data.get("repetition_of_id", instance.repetition_of) instance.playlist_id = validated_data.get("playlist_id", instance.playlist_id) - instance.language.set(validated_data.get("language", [])) - instance.topic.set(validated_data.get("topic", [])) + if language := validated_data.get("language", []): + instance.language.set(language) + + if topic := validated_data.get("topic", []): + instance.topic.set(topic) instance.save() return instance @@ -794,6 +815,7 @@ class NoteSerializer(serializers.ModelSerializer): ) links = NoteLinkSerializer(many=True, required=False) playlist_id = serializers.IntegerField(required=False) + tags = serializers.JSONField(default=[], required=False) timeslot_id = serializers.PrimaryKeyRelatedField( queryset=TimeSlot.objects.all(), required=False ) @@ -868,11 +890,12 @@ class NoteSerializer(serializers.ModelSerializer): instance.image = validated_data.get("image_id", instance.image) instance.slug = validated_data.get("slug", instance.slug) instance.summary = validated_data.get("summary", instance.summary) - instance.tags = validated_data.get("tags", instance.tags) instance.timeslot = validated_data.get("timeslot_id", instance.timeslot) + instance.tags = validated_data.get("tags", instance.tags) instance.title = validated_data.get("title", instance.title) - instance.contributors.set(validated_data.get("contributors", instance.contributors)) + if contributors := validated_data.get("contributors", []): + instance.contributors.set(contributors) if cba_id := validated_data.get("cba_id"): if audio_url := get_audio_url(cba_id): -- GitLab