Django 删除upload_to文件的步骤
作者:sunmlight 时间:2022-03-23 05:47:14
新版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的随机数保存,效果如下:
来源:https://blog.csdn.net/qq_39926957/article/details/82853997
标签:Django,删除,upload,to
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python中numpy数组的计算与转置详解
2022-11-24 09:27:57
![](https://img.aspxhome.com/file/2023/5/95805_0s.png)
python request post 列表的方法详解
2023-10-04 11:46:19
什么是用户体验优化(UEO)
2008-08-27 19:49:00
基于Python实现有趣的象棋游戏
2022-06-11 20:37:15
![](https://img.aspxhome.com/file/2023/0/72060_0s.jpg)
php封装json通信接口详解及实例
2023-11-14 21:56:26
PyQt QListWidget修改列表项item的行高方法
2022-02-08 08:33:35
![](https://img.aspxhome.com/file/2023/3/81783_0s.jpg)
sql 附加数据库后,孤立用户的解决办法
2011-01-22 13:46:00
![](https://img.aspxhome.com/file/UploadPic/20111/22/4-37s.jpg)
Python中导入模块的几种方式总结
2023-08-04 17:03:54
![](https://img.aspxhome.com/file/2023/2/61432_0s.png)
基于PyQt5制作一个表情包下载器
2022-02-23 13:30:58
![](https://img.aspxhome.com/file/2023/9/91959_0s.png)
Python连接es之查询方式示例汇总
2023-06-07 11:11:03
Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
2007-09-23 12:43:00
详解Django中CSRF和CORS的区别
2021-02-19 19:16:51
![](https://img.aspxhome.com/file/2023/1/78741_0s.jpg)
在生成的静态页面中统计点击次数
2009-11-19 13:20:00
Oracle 数据 使用游标
2009-07-02 12:14:00
mysql与sqlserver的所有区别
2009-02-27 16:18:00
详解Python的多线程定时器threading.Timer
2023-04-07 03:33:43
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2023-11-20 02:09:06
![](https://img.aspxhome.com/file/2023/2/64252_0s.png)
python求解三角形第三边长实例
2021-08-24 06:16:28
![](https://img.aspxhome.com/file/2023/8/95398_0s.png)
Python保存数据至MySQL时中文问题
2011-02-23 12:06:00
Python CSV模块使用实例
2022-02-04 18:56:36