网络编程
位置:首页>> 网络编程>> Python编程>> Django 删除upload_to文件的步骤

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的随机数保存,效果如下:

Django 删除upload_to文件的步骤

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com