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
0
投稿
猜你喜欢
MySQL server has gone away 问题的解决方法
2024-01-18 11:46:11
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2021-02-27 17:00:28
基于Golang 高并发问题的解决方案
2024-02-20 16:49:01
Go语言设计模式之实现观察者模式解决代码臃肿
2024-05-25 15:11:17
Python flask sqlalchemy的简单使用及常用操作
2021-09-22 22:11:18
python中实现k-means聚类算法详解
2021-07-18 21:42:49
mysql数据库查询优化 mysql效率第1/3页
2024-01-28 05:16:17
python内置函数之eval函数详解
2022-07-22 12:39:29
Oracle如何直接运行OS命令(下)第1/2页
2010-07-30 13:26:00
python 实现自动远程登陆scp文件实例代码
2022-04-02 20:25:31
如何让12px以下的文字最佳显示
2008-01-24 18:39:00
浅谈pc端rem字体设置的问题
2024-05-22 10:27:44
Go语言反射reflect.Value实现方法的调用
2023-07-22 15:50:11
Java中正则表达式的使用和详解(下)
2022-07-28 13:40:14
pyqt实现.ui文件批量转换为对应.py文件脚本
2022-01-22 03:32:26
详解MySQL多版本并发控制机制(MVCC)源码
2024-01-20 04:20:38
Python 抖音评论数据抓取分析
2023-03-22 15:30:20
Python3.7中安装openCV库的方法
2021-07-07 04:23:32
手把手教你用SQL获取年、月、周几、日、时
2024-01-24 05:04:12
Linux下MySQL整个数据库的备份与还原
2008-12-29 13:20:00