这篇文章给大家分享的是有关Django中删除upload_to文件的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

新版Django在admin后台直接删除一条数据时,file = models.FileField(upload_to=‘file')上传的文件并不会删除,以下为解决方法:
在model.py加入:
from django.db.models.signals import pre_delete from django.dispatch.dispatcher import receiver @receiver(pre_delete, sender=AddDateModel) def mymodel_delete(sender, instance, **kwargs): # Pass false so FileField doesn't save the model. instance.file.delete(False)
补充知识:django之重写FileField字段的保存实例
重写FileField字段的保存,以重命名为例
settings.py添加配置
settings.py中末尾添加配置如下,指定指向的操作文件中的类:
# 文件上传重写
DEFAULT_FILE_STORAGE = "app.customfilefield.storage.FileStorage"
添加FileStorage
app应用下添加python包customfilefield,注意有init.py文件,customfilefield下创建py文件storage.py,文件内容为:
storage.py
# -*-coding:utf-8 -*-
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
from django.conf import settings
import os, time, random
from app import utils
class FileStorage(FileSystemStorage):
def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
#初始化
super(FileStorage, self).__init__(location, base_url)
#重写 _save方法
def _save(self, name, content):
#文件扩展名
ext = os.path.splitext(name)[1]
#文件目录
d = os.path.dirname(name)
# 定义文件名,源文件名,避开系统定义的随机字符串追加,所以避开不用name字段
end = utils.find_last(str(content), ".")
filename = ""
if end != -1:
filename = str(content)[:end]
# 定义文件名,年月日时分秒随机数
fn = time.strftime("%Y%m%d%H%M%S")
fn = fn + "_%d" % random.randint(0,100)
#重写合成文件名
name = os.path.join(d, filename + fn + ext)
#调用父类方法
return super(FileStorage, self)._save(name, content)utils.py
# 获取字符串中指定字符最后一次出现的位置 def find_last(string,str): last_position=-1 while True: position=string.find(str,last_position+1) if position==-1: return last_position last_position=position
如此,最后上传的文件名为原文件名加上年月日时分秒加上0-100的随机数保存,效果如下:

感谢各位的阅读!关于“Django中删除upload_to文件的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!