Как удалить файл из папки мультимедиа? - PullRequest
0 голосов
/ 20 января 2020

У меня есть этот код, который удаляет все файлы, сохраненные в папке, и файлы в таблице базы данных:

def delete(request):
    folder = '../f2candon/andon/static/media/fileupload'
    for the_file in os.listdir(folder):
        file_path = os.path.join(folder, the_file)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
        except Exception as e:
            print(e)
    delet = Media.objects.all()
    delet.delete()
    return HttpResponseRedirect('/mediafile/')

Но я должен разместить другой, где удален только один файл, независимо от того, был ли он удален по идентификатору, чтобы удалить его из базы данных, я делаю это так:

def delete_media(request, id):
    delete_file = Media.objects.get(pk=id)
    delete_file.delete()
    return HttpResponseRedirect('/mediafile/')

Есть ли способ удалить тот же файл из папки мультимедиа, которая только что была удалена в базе данных? Эти же файлы находятся в базе данных и в папке.

С уважением.

1 Ответ

1 голос
/ 20 января 2020

Вы можете написать обработчик сигнала для post_delete, который заботится о удалении файлов после удаления объекта в базе данных:

@receiver(post_delete, sender=Media)
def delete_associated_files(sender, instance, **kwargs):
    """Removes the media file from disk after deletion."""
    if instance.file:  # assuming the field name is "file"
        instance.file.delete(save=False) 
...