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中利用原始套接字进行网络编程的示例
May 04 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
详解Python 函数如何重载?
Apr 23 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Python3+Appium安装使用教程
Jul 05 Python
opencv python图像梯度实例详解
Feb 04 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
Python调用jar包方法实现过程解析
Aug 11 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
Python matplotlib可视化之绘制韦恩图
Feb 24 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实现mysql数据库备份类
2008/03/20 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
浅谈PHP封装CURL
2019/03/06 PHP
javascript引导程序
2008/10/26 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
实例解析Array和String方法
2016/12/14 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Python多线程和队列操作实例
2015/06/21 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
MYSQL基础面试题
2012/05/13 面试题
后勤部长岗位职责
2013/12/14 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
学校文明单位申报材料
2014/05/06 职场文书
八达岭长城导游词
2015/01/30 职场文书
行政前台岗位职责
2015/04/16 职场文书
小学运动会宣传稿
2015/07/23 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python