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的Twisted框架实现一个简单的服务器
Apr 16 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
python 读写中文json的实例详解
Oct 29 Python
python方向键控制上下左右代码
Jan 20 Python
numpy中的delete删除数组整行和整列的实例
May 09 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
Python多进程fork()函数详解
Feb 22 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
详细总结Python常见的安全问题
May 21 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
python实现爬取千万淘宝商品的方法
2015/06/30 Python
发布你的Python模块详解
2016/09/15 Python
基于python实现文件加密功能
2020/01/06 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python如何定义有可选参数的元类
2020/07/31 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
槐乡的孩子教学反思
2014/04/27 职场文书
企业安全生产检查制度
2015/08/06 职场文书