Django 删除upload_to文件的步骤
作者:sunmlight 发布时间:2022-03-23 05:47:14
标签:Django,删除,upload,to
新版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的随机数保存,效果如下:
来源:https://blog.csdn.net/qq_39926957/article/details/82853997


猜你喜欢
- 认识pip众所周知,pip可以对python的第三方库进行安装、更新、卸载等操作,十分方便。pip的全称:package installer
- 1.配置环境安装python3安装python3-pip通过pip安装Django**如果需要使用Jinja模板,需要通过pip安装djan
- 在学习人工智能时,大量的使用了np.random.seed(),利用随机数种子,使得每次生成的随机数相同。我们带着2个问题来进行下列实验np
- 概述TensorFlow2 的基本操作和 Numpy 的操作很像. 今天带大家来看一看 TensorFlow 的基本数据操作.创建数据详细讲
- 本节课前一节我们开始设计第一个项目, 一个内训公司的企业网站, 本节课学习响应式导航部分。基本导航组件+响应式://基本导航组件+响应式&l
- 本文实例讲述了Python实现的删除重复文件或图片功能。分享给大家供大家参考,具体如下:通过python爬虫或其他方式保存的图片文件通常包含
- 即以游客身份登录网站时以cookie的方式存储购物车,而以登录用户的身份进入时将购物车信息存储到数据库中去,若是先以游客身份完成购物再登录继
- <input type=button value=刷新 onclick="window.location.reload()&
- K线图概念股市及期货市bai场中的K线图的du画法包含四个zhi数据,即开盘dao价、最高价、最低价zhuan、收盘价,所有的shuk线都是
- 库的管理创建库create database [if not exists] 库名;删除库drop databases [if exists
- 当前登入的用户以及他(她)的权限可以通过 RequestContext 在模板的context中使用。注意从技术上来说,只有当你使用了 Re
- 这篇文章主要介绍了python被修饰的函数消失问题解决(基于wraps函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 本文研究的主要是Python编程argparse的相关内容,具体介绍如下。#aaa.py#version 3.5import os &nbs
- python urllib urlopen()对象方法/代理的补充说明urllib 是 python 自带的一个抓取网页信息一个接口,他最主
- 本文实例讲述了Python使用crontab模块设置和清除定时任务操作。分享给大家供大家参考,具体如下:centos7下安装Python的p
- 组建一个关于书籍、作者、出版社的例子:from django.db import modelsclass Publisher(models.
- 在 MySQL 中,可以使用 REVOKE 语句删除某个用户的某些权限(此用户不会被删除),在一定程度上可以保证系统的安全性。例如,如果数据
- 合并numpy中numpy中可以通过concatenate,指定参数axis=0 或者 axis=1,在纵轴和横轴上合并两个数组。impor
- 一、命令格式:定义变量名称条件函数用“:”作为结尾下一级命令用空格键缩进,默认使用Tab键因为这样比较明显例如:yongHuMing = i
- TensorFlow版本更新太快 了,所以导致一些以前接口函数不一致,会报错。这里总结了一下自己犯的错,以防以后再碰到,也可以给别人参考。首