diff --git a/program/serializers.py b/program/serializers.py index bf71dee7646b6df5d1a5e38ec14fd2c874d101fd..9f5ad200f498a43d4fb1d7f5c5635462df089d1c 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -1527,3 +1527,33 @@ class PlaylistSerializer(serializers.ModelSerializer): PlaylistEntry.objects.create(playlist=playlist, **entry_data) return playlist + + def update(self, instance, validated_data): + """Update an existing Playlist instance, given the validated data.""" + + user = self.context["request"].user + user_is_owner = user in instance.show.owners.all() + + # having the update_playlist permission overrules the ownership + if not (user.has_perm("program.update_playlist") or user_is_owner): + raise exceptions.PermissionDenied( + detail="You are not allowed to update this playlist." + ) + + if "description" in validated_data: + instance.description = validated_data.pop("description") + + if "playout_mode" in validated_data: + instance.playout_mode = validated_data.pop("playout_mode") + + if "entries" in validated_data: + if instance.entries.count() > 0: + for entry in instance.entries.all(): + entry.delete(keep_parents=True) + + for entry_data in validated_data.get("entries"): + PlaylistEntry.objects.create(playlist=instance, **entry_data) + + instance.save() + + return instance