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程序设计入门(3)数组的使用
Jun 16 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
浅谈python写入大量文件的问题
Nov 09 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
python matplotlib库直方图绘制详解
Aug 10 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
Python中Permission denied的解决方案
Apr 02 Python
Python的三个重要函数详解
Jan 18 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/06/20 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
php的curl封装类用法实例
2014/11/07 PHP
PHP中使用curl入门教程
2015/07/02 PHP
php 问卷调查结果统计
2015/10/08 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
C#基础面试题
2016/10/17 面试题
医生实习工作总结的自我评价
2013/09/27 职场文书
代理协议书范本
2014/04/22 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python