gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:29:25 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com