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批量同步web服务器代码核心程序
Sep 01 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
新手常见6种的python报错及解决方法
Mar 09 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
python cumsum函数的具体使用
Jul 29 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python线程信号量semaphore使用解析
Nov 30 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
python 基于pygame实现俄罗斯方块
Mar 02 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使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
如何用PHP做到页面注册审核
2017/03/02 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Django中的Signal代码详解
2018/02/05 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
Django进阶之CSRF的解决
2018/08/01 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
异步传递消息系统的作用
2016/05/01 面试题
高中政治教学反思
2014/01/18 职场文书
县委务虚会发言材料
2014/10/20 职场文书
检讨书范文1000字
2015/01/28 职场文书
2015年护士节慰问信
2015/03/23 职场文书
校园安全学习心得体会
2016/01/18 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers