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简单实现enum功能的方法
Apr 25 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
Python求出0~100以内的所有素数
Jan 23 Python
Django处理文件上传File Uploads的实例
May 28 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
基于iScroll实现内容滚动效果
2018/03/21 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
基于python代码批量处理图片resize
2020/06/04 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
办公室前台岗位职责
2014/01/04 职场文书
高一数学教学反思
2014/02/07 职场文书
班组长竞聘书
2014/03/31 职场文书
世界红十字日活动总结
2015/02/10 职场文书
自我推荐信格式模板
2015/03/24 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
Windows server 2016服务器基本设置
2022/08/14 Servers