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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
python实现用于测试网站访问速率的方法
May 26 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
python多维数组切片方法
Apr 13 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
对python制作自己的数据集实例讲解
Dec 12 Python
pytorch 自定义参数不更新方式
Jan 06 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
Python爬虫基础初探selenium
May 31 Python
python数字转对应中文的方法总结
Aug 02 Python
Pygame Draw绘图函数的具体使用
Nov 17 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP详细彻底学习Smarty
2008/03/27 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP生成树的方法
2015/07/28 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
vue-router history模式下的微信分享小结
2018/07/05 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
深入浅析python 中的匿名函数
2018/05/21 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
python 实现敏感词过滤的方法
2019/01/21 Python
Python中文编码知识点
2019/02/18 Python
python django model联合主键的例子
2019/08/06 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
Redis实现分布式锁的五种方法详解
2022/06/14 Redis