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实现在线程里运行scrapy的方法
Apr 07 Python
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
浅谈Python基础—判断和循环
Mar 22 Python
python实现AES加密解密
Mar 28 Python
python批量修改ssh密码的实现
Aug 08 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
Python的历史与优缺点整理
May 26 Python
python自定义函数def的应用详解
Jun 03 Python
python speech模块的使用方法
Sep 09 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
Content-type 的说明
2006/10/09 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
Yii配置文件用法详解
2014/12/04 PHP
php安装swoole扩展的方法
2015/03/19 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python3 max()函数基础用法
2019/02/19 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
通过自学python能找到工作吗
2020/06/21 Python
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
十八大宣传标语
2014/10/09 职场文书
团队会宣传标语
2014/10/09 职场文书
教育合作协议范本
2014/10/17 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
销售人员管理制度
2015/08/06 职场文书
消防安全培训工作总结
2015/10/23 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android