Django 删除upload_to文件的步骤

作者:sunmlight 时间:2022-03-23 05:47:14 

新版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文件的步骤

来源:https://blog.csdn.net/qq_39926957/article/details/82853997

标签:Django,删除,upload,to
0
投稿

猜你喜欢

  • Python中numpy数组的计算与转置详解

    2022-11-24 09:27:57
  • python request post 列表的方法详解

    2023-10-04 11:46:19
  • 什么是用户体验优化(UEO)

    2008-08-27 19:49:00
  • 基于Python实现有趣的象棋游戏

    2022-06-11 20:37:15
  • php封装json通信接口详解及实例

    2023-11-14 21:56:26
  • PyQt QListWidget修改列表项item的行高方法

    2022-02-08 08:33:35
  • sql 附加数据库后,孤立用户的解决办法

    2011-01-22 13:46:00
  • Python中导入模块的几种方式总结

    2023-08-04 17:03:54
  • 基于PyQt5制作一个表情包下载器

    2022-02-23 13:30:58
  • Python连接es之查询方式示例汇总

    2023-06-07 11:11:03
  • Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器

    2007-09-23 12:43:00
  • 详解Django中CSRF和CORS的区别

    2021-02-19 19:16:51
  • 在生成的静态页面中统计点击次数

    2009-11-19 13:20:00
  • Oracle 数据 使用游标

    2009-07-02 12:14:00
  • mysql与sqlserver的所有区别

    2009-02-27 16:18:00
  • 详解Python的多线程定时器threading.Timer

    2023-04-07 03:33:43
  • Python+Django+MySQL实现基于Web版的增删改查的示例代码

    2023-11-20 02:09:06
  • python求解三角形第三边长实例

    2021-08-24 06:16:28
  • Python保存数据至MySQL时中文问题

    2011-02-23 12:06:00
  • Python CSV模块使用实例

    2022-02-04 18:56:36
  • asp之家 网络编程 m.aspxhome.com