From edb655bcbc804c0bc3b214b56919c66ef01aae8e Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 6 Dec 2023 13:42:27 -0400 Subject: [PATCH] fix: handle optional many-to-many in update (PATCH) requests Closes: #185 --- program/serializers.py | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index 764a3cd2..a5383bff 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -548,12 +548,24 @@ 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.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", [])) + # optional many-to-many in PATCH requests + if (category := validated_data.get("category")) is not None: + instance.category.set(category) + + if (hosts := validated_data.get("hosts")) is not None: + instance.hosts.set(hosts) + + if (language := validated_data.get("language")) is not None: + instance.language.set(language) + + if (music_focus := validated_data.get("music_focus")) is not None: + instance.music_focus.set(music_focus) + + if (owners := validated_data.get("owners")) is not None: + instance.owners.set(owners) + + if (topic := validated_data.get("topic")) is not None: + instance.topic.set(topic) if links_data := validated_data.get("links"): instance = delete_links(instance) @@ -892,9 +904,15 @@ class NoteSerializer(serializers.ModelSerializer): instance.tags = validated_data.get("tags", instance.tags) instance.title = validated_data.get("title", instance.title) - instance.contributors.set(validated_data.get("contributors", [])) - instance.language.set(validated_data.get("language", [])) - instance.topic.set(validated_data.get("topic", [])) + # optional many-to-many in PATCH requests + if (contributors := validated_data.get("contributors")) is not None: + instance.contributors.set(contributors) + + if (language := validated_data.get("language")) is not None: + instance.language.set(language) + + if (topic := validated_data.get("topic")) is not None: + instance.topic.set(topic) if cba_id := validated_data.get("cba_id"): if audio_url := get_audio_url(cba_id): -- GitLab