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 相关文章推荐
详解Python3中的Sequence type的使用
Aug 01 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
使用python实现个性化词云的方法
Jun 16 Python
Python学习思维导图(必看篇)
Jun 26 Python
python实现微信远程控制电脑
Feb 22 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
Python高级property属性用法实例分析
Nov 19 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
javascript基本语法
2016/05/31 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
Python实现Const详解
2015/01/27 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
Python根据成绩分析系统浅析
2019/02/11 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
自立自强的名人事例
2014/02/10 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python