django - 在 Django 中删除上传的文件

标签 django delete-file

我有以下代码来删除文件:

from django.db import models
from django import forms
import os

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')
    def __unicode__(self):
        return '%s' % (self.docfile.name)
    def delete(self, *args, **kwargs):
        os.rmdir(os.path.join(settings.MEDIA_ROOT, self.docfile.name))
        super(Document,self).delete(*args,**kwargs)

它设法删除了我在 views.py 中要求它删除的对象,但是当我重新上传同名文件时,似乎原始文件仍然存在,因为我将获得“output_1.txt”而不是“output.txt” ”。

这是我用来删除的代码:
def delete_matrix():
    documents = Document.objects.all()
    documents.delete()

我不是从数据库中删除文件吗?任何帮助,将不胜感激。

最佳答案

你的问题是你覆盖了 delete()模型上的方法,但您正在调用 delete QuerySet上的方法由默认管理器 ( Documents.object.all().delete() ) 返回。这是 2 种不同的方法,因此有 2 种方法可以解决此问题。

1.在delete模型的方法,替换线

os.rmdir(os.path.join(settings.MEDIA_ROOT, self.docfile.name))

经过
os.remove(os.path.join(settings.MEDIA_ROOT, self.docfile.name))

并且,分别为每个对象调用 delete 方法。代替
Document.objects.all().delete()


documents = Document.objects.all()
for document in documents:
    document.delete()

2.替换默认管理器返回自定义QuerySet它覆盖了 delete()方法。这在 Overriding QuerySet.delete() in Django 中有解释

关于django - 在 Django 中删除上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663809/

相关文章:

awk - 无法删除没有标签/<none> 标签的 docker 图像

java - 为什么无论我为什么删除我的文件都不会删除?

file - 如果 TortoiseSVN 中的某些文件被标记为 "deleted"而其他文件被标记为 "deleted (+)"则是什么意思?

Django 1.4 TimeField 迁移在 PostgreSQL 上失败

python - 我怎么会在 Django 中收到此无导入错误?

html - 如何让 Django 在数据库中显示我想要的内容

python - 如何在 Django 中重定向(包括 URL 更改)?

powershell - 能做到吗根据文件使用Powershell的年代删除大量文件

linux - bash 中的安全递归删除

python - 反转 '',参数 '' 和关键字参数 '{}' 未找到