From fc9d9c1c15d288af135352c3e75021a630734e1f Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Thu, 23 Nov 2023 15:52:54 -0400 Subject: [PATCH] fix: allow to set empty fields when updating Show and Note Closes: #178 --- program/serializers.py | 48 +++++++++++++----------------------------- 1 file changed, 15 insertions(+), 33 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index ea70b69b..764a3cd2 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -548,23 +548,12 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): instance.slug = validated_data.get("slug", instance.slug) instance.type = validated_data.get("type_id", instance.type) - 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) + instance.category.set(validated_data.get("category", [])) + instance.hosts.set(validated_data.get("hosts", [])) + instance.language.set(validated_data.get("language", [])) + instance.music_focus.set(validated_data.get("music_focus", [])) + instance.owners.set(validated_data.get("owners", [])) + instance.topic.set(validated_data.get("topic", [])) if links_data := validated_data.get("links"): instance = delete_links(instance) @@ -779,7 +768,6 @@ 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.save() return instance @@ -790,17 +778,15 @@ class NoteLinkSerializer(serializers.ModelSerializer): fields = ("type", "url") -tags_json_schema = { - "type": "array", - "items": { - "type": "string" - } -} +tags_json_schema = {"type": "array", "items": {"type": "string"}} class NoteSerializer(serializers.ModelSerializer): contributor_ids = serializers.PrimaryKeyRelatedField( - many=True, queryset=Host.objects.all(), required=False, source="contributors", + many=True, + queryset=Host.objects.all(), + required=False, + source="contributors", ) image_id = serializers.PrimaryKeyRelatedField( queryset=Image.objects.all(), required=False, allow_null=True @@ -864,6 +850,7 @@ class NoteSerializer(serializers.ModelSerializer): show = validated_data["timeslot"].schedule.show + # we derive `contributors`, `language` and `topic` from the Show's values if not set contributors = validated_data.pop("contributors", show.owners.values_list("id", flat=True)) language = validated_data.pop("language", show.language.values_list("id", flat=True)) topic = validated_data.pop("topic", show.topic.values_list("id", flat=True)) @@ -905,8 +892,9 @@ class NoteSerializer(serializers.ModelSerializer): instance.tags = validated_data.get("tags", instance.tags) instance.title = validated_data.get("title", instance.title) - if contributors := validated_data.get("contributors", []): - instance.contributors.set(contributors) + instance.contributors.set(validated_data.get("contributors", [])) + instance.language.set(validated_data.get("language", [])) + instance.topic.set(validated_data.get("topic", [])) if cba_id := validated_data.get("cba_id"): if audio_url := get_audio_url(cba_id): @@ -918,12 +906,6 @@ class NoteSerializer(serializers.ModelSerializer): for link_data in links_data: NoteLink.objects.create(note=instance, **link_data) - if language := validated_data.get("language", []): - instance.language.set(language) - - if topic := validated_data.get("topic", []): - instance.topic.set(topic) - instance.updated_by = self.context.get("request").user.username instance.save() -- GitLab