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 02 Python
python实现将元祖转换成数组的方法
May 04 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
redis之django-redis的简单缓存使用
Jun 07 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
python 列表降维的实例讲解
Jun 28 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
numpy中的ndarray方法和属性详解
May 27 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
python3注册全局热键的实现
Mar 22 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
php页面函数设置超时限制的方法
2014/12/01 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python实现LRU热点缓存及原理
2019/10/29 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
python爬取微博评论的实例讲解
2021/01/15 Python
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
作弊检讨书1000字
2014/02/01 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
九九重阳节标语
2014/10/07 职场文书
置业顾问岗位职责
2015/02/09 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript