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 实现插入排序算法
Jun 05 Python
Python入门教程之if语句的用法
May 14 Python
举例详解Python中yield生成器的用法
Aug 05 Python
Python随机数random模块使用指南
Sep 09 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
《Python学习手册》学习总结
Jan 17 Python
python保存文件方法小结
Jul 27 Python
python实现年会抽奖程序
Jan 22 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
python获取Linux发行版名称
Aug 30 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Python 如何调试程序崩溃错误
Aug 03 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学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
20招让你的Python飞起来!
2016/09/27 Python
Python ldap实现登录实例代码
2016/09/30 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
事假请假条范文
2014/04/11 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript
GO中sync包自由控制并发示例详解
2022/08/05 Golang