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常见文件操作的函数示例代码
Nov 15 Python
浅谈五大Python Web框架
Mar 20 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python 输出上个月的月末日期实例
Apr 11 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
利用Python校准本地时间的方法教程
Oct 31 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
python 实现有道翻译功能
Feb 26 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
解读ES6中class关键字
2017/11/20 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
跟老齐学Python之一个免费的实验室
2014/09/14 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
python让函数不返回结果的方法
2020/06/22 Python
利用python 下载bilibili视频
2020/11/13 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
学前教育学生自荐信范文
2013/12/31 职场文书
区三好学生主要事迹
2014/01/30 职场文书
副总经理任命书
2014/06/05 职场文书
花坛标语大全
2014/06/30 职场文书
考研英语复习计划
2015/01/19 职场文书
通知的写法
2015/04/23 职场文书
2019年思想汇报
2019/06/20 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS