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
投稿

猜你喜欢

  • MySQL server has gone away 问题的解决方法

    2024-01-18 11:46:11
  • python3.5 + PyQt5 +Eric6 实现的一个计算器代码

    2021-02-27 17:00:28
  • 基于Golang 高并发问题的解决方案

    2024-02-20 16:49:01
  • Go语言设计模式之实现观察者模式解决代码臃肿

    2024-05-25 15:11:17
  • Python flask sqlalchemy的简单使用及常用操作

    2021-09-22 22:11:18
  • python中实现k-means聚类算法详解

    2021-07-18 21:42:49
  • mysql数据库查询优化 mysql效率第1/3页

    2024-01-28 05:16:17
  • python内置函数之eval函数详解

    2022-07-22 12:39:29
  • Oracle如何直接运行OS命令(下)第1/2页

    2010-07-30 13:26:00
  • python 实现自动远程登陆scp文件实例代码

    2022-04-02 20:25:31
  • 如何让12px以下的文字最佳显示

    2008-01-24 18:39:00
  • 浅谈pc端rem字体设置的问题

    2024-05-22 10:27:44
  • Go语言反射reflect.Value实现方法的调用

    2023-07-22 15:50:11
  • Java中正则表达式的使用和详解(下)

    2022-07-28 13:40:14
  • pyqt实现.ui文件批量转换为对应.py文件脚本

    2022-01-22 03:32:26
  • 详解MySQL多版本并发控制机制(MVCC)源码

    2024-01-20 04:20:38
  • Python 抖音评论数据抓取分析

    2023-03-22 15:30:20
  • Python3.7中安装openCV库的方法

    2021-07-07 04:23:32
  • 手把手教你用SQL获取年、月、周几、日、时

    2024-01-24 05:04:12
  • Linux下MySQL整个数据库的备份与还原

    2008-12-29 13:20:00
  • asp之家 网络编程 m.aspxhome.com