Django 删除upload_to文件的步骤
2020-03-31 12:05
2521 查看
新版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文件的步骤就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- django filefield实现动态改变文件上传位置upload_to
- 利用SmartUpload文件上传,创建目录,删除文件等操作范例
- ysql导入数据库文件最大限制更改解决方法You probably tried to upload too large file
- CodeIgniter文件上传时提示The filetype you are attempting to upload is not allowed
- struts2 +jquey uploadify3.2 实现多文件上传,可预览、删除、排序
- jspSmartUpload--文件上传与下载组件的应用----文件上传、下载、删除
- SecureCRT sftp上传文件报错:put: failed to upload xxx 拒绝访问
- PHP切换版本 或有的版本上传文件报错:PHP Warning: File upload error - unable to create a temporary file in Unknow
- DFS 文件删除的步骤
- ORA-27041: unable to open file--恢复被rm意外删除数据文件
- SQL 备份数据 脚本 -添加到作业 步骤里面 可删除历史天文件
- mysql导入数据库文件最大限制更改解决方法You probably tried to upload too large file
- 双系统卸载Windows 7后删除XP系统盘主引导分区的残留文件详细步骤(适用于Vista/WS2008)
- Android studio ...':app:clean'. > Unable to delete directory: XX\build\outputs\apk不能删除文件问题
- SpringBoot 上传文件突然报错 Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608
- django如何实现文件的上传,修改,删除,展示(03)
- 超详细的django1.8处理centos下nginx上处理静态文件步骤!
- webupload控件实现删除已上传的文件
- Django简单步骤(一)——安装及文件介绍
- mysql导入数据库文件最大限制更改解决方法:phpmyadmin数据库导入出错:You probably tried to upload too large file