当我在使用Django 1.9时删除模型对象时,如何让Django删除文件?

时间:2016-05-10 13:08:13

标签: python django django-models

当我删除模型时,我试图让Django 1.9版删除模型中与FileField相对应的文件。我的第一次尝试基于delete signals as explained in another answer,但这似乎不适用于Django 1.8及其后续版本。另一个答案指向我Django-cleanup的方向,但它对我也不起作用(可能是它在内部使用相同的方法吗?)。我也试过post delete signal approach explained here,但方法从未触发过。那么这样做的新方法是什么,删除模型时删除文件的任何方法都适合我。

1 个答案:

答案 0 :(得分:1)

我在视图中使用了以下解决方法:

@login_required
def deleteDataset(request, pk):
    instance = DatasetModel.objects.defer('filecontent').get(pk=pk)
    if request.method == 'POST':
        path = instance.filecontent.path
        instance.delete()
        if os.path.isfile(path):
            os.remove(path)

        return redirect(main)
    else:
        return redirect(main)

但我仍然希望找到更好的解决方案,因为我希望尽可能缩短视图