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 11 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
python实现发送邮件功能代码
Dec 14 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
Python设计模式之策略模式实例详解
Jan 21 Python
pow在python中的含义及用法
Jul 11 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
Python Celery多队列配置代码实例
Nov 22 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
python梯度下降算法的实现
Feb 24 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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的日期与时间函数技巧
2008/04/24 PHP
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
numpy排序与集合运算用法示例
2017/12/15 Python
python组合无重复三位数的实例
2018/11/13 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Python ini文件常用操作方法解析
2020/04/26 Python
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
职业技术学校毕业生推荐信
2013/12/03 职场文书
公司年会晚宴演讲稿
2014/01/06 职场文书
干部现实表现材料
2014/02/13 职场文书
法人授权委托书范本
2014/04/04 职场文书
社区戒毒工作方案
2014/06/04 职场文书
校庆团日活动总结
2014/08/28 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
校园安全主题班会
2015/08/12 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
Python实现位图分割的效果
2021/11/20 Python
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript