Django 删除upload_to文件的步骤


Posted in Python onMarch 30, 2020

新版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 删除upload_to文件的步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
Python3生成手写体数字方法
Jan 30 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
微信公众号token验证失败解决方案
Jul 22 Python
在python image 中实现安装中文字体
May 16 Python
Python中的全局变量如何理解
Jun 04 Python
python 制作磁力搜索工具
Mar 04 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
python with语句的原理与用法详解
Mar 30 #Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 #Python
Python进程的通信Queue、Pipe实例分析
Mar 30 #Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 #Python
django 扩展user用户字段inlines方式
Mar 30 #Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 #Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 #Python
You might like
PHP has encountered an Access Violation
2007/01/15 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
php单链表实现代码分享
2016/07/04 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
PHP调用其他文件中的类
2018/04/02 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
python中as用法实例分析
2015/04/30 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
PHP开发的一般流程
2013/08/13 面试题
优质服务活动实施方案
2014/05/02 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
新店开张宣传语
2015/07/13 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python
docker-compose部署Yapi的方法
2022/04/08 Servers