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中映射类型的内建函数和工厂函数
Aug 19 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
Python中存取文件的4种不同操作
Jul 02 Python
python实现全盘扫描搜索功能的方法
Feb 14 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python实现在函数中修改变量值的方法
Jul 16 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python入门教程之基本算术运算符
Nov 13 Python
Python爬虫新手入门之初学lxml库
Dec 20 Python
Python实现数据的序列化操作详解
Jul 07 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
综合图片计数器
2006/10/09 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php下Memcached入门实例解析
2015/01/05 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
javascript 写类方式之二
2009/07/05 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
使用svg实现动态时钟效果
2018/07/17 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
决策树的python实现方法
2014/11/18 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
学习和使用python的13个理由
2019/07/30 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python TCP包注入方式
2020/05/05 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
六道php面试题附答案
2014/06/05 面试题
进程的查看和调度分别使用什么命令
2015/03/25 面试题
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书