From 619fc29cd41f86b072e40fd2cd4e7263efbae3da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20J=C3=A4ckel?= Date: Tue, 28 Mar 2017 00:17:02 +0200 Subject: [PATCH] Delete a file from filesystem when mediafile is deleted/destroied via REST api. Fixed #3146. --- openslides/mediafiles/views.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/openslides/mediafiles/views.py b/openslides/mediafiles/views.py index cdc8113f2..9a1216fab 100644 --- a/openslides/mediafiles/views.py +++ b/openslides/mediafiles/views.py @@ -51,3 +51,18 @@ class MediafileViewSet(ModelViewSet): if not self.request.data.get('mediafile'): raise ValidationError({'detail': 'You forgot to provide a file.'}) return super().create(request, *args, **kwargs) + + def destroy(self, request, *args, **kwargs): + """ + Customized view endpoint to delete uploaded files. + + Does also delete the file from filesystem. + """ + # To avoid Django calling save() and triggering autoupdate we do not + # use the builtin method mediafile.mediafile.delete() but call + # mediafile.mediafile.storage.delete(...) directly. This may have + # unattended side effects so be careful especially when accessing files + # on server via Django methods (file, open(), save(), ...). + mediafile = self.get_object() + mediafile.mediafile.storage.delete(mediafile.mediafile.name) + return super().destroy(request, *args, **kwargs)