Django 刪除upload_to文件的步驟
新版Django在admin后臺(tái)直接刪除一條數(shù)據(jù)時(shí),file = models.FileField(upload_to=‘file')上傳的文件并不會(huì)刪除,以下為解決方法:
在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)
補(bǔ)充知識(shí):django之重寫FileField字段的保存實(shí)例
重寫FileField字段的保存,以重命名為例
settings.py添加配置
settings.py中末尾添加配置如下,指定指向的操作文件中的類:
# 文件上傳重寫
DEFAULT_FILE_STORAGE = "app.customfilefield.storage.FileStorage"
添加FileStorage
app應(yīng)用下添加python包c(diǎn)ustomfilefield,注意有init.py文件,customfilefield下創(chuàng)建py文件storage.py,文件內(nèi)容為:
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):
#文件擴(kuò)展名
ext = os.path.splitext(name)[1]
#文件目錄
d = os.path.dirname(name)
# 定義文件名,源文件名,避開系統(tǒng)定義的隨機(jī)字符串追加,所以避開不用name字段
end = utils.find_last(str(content), ".")
filename = ""
if end != -1:
filename = str(content)[:end]
# 定義文件名,年月日時(shí)分秒隨機(jī)數(shù)
fn = time.strftime("%Y%m%d%H%M%S")
fn = fn + "_%d" % random.randint(0,100)
#重寫合成文件名
name = os.path.join(d, filename + fn + ext)
#調(diào)用父類方法
return super(FileStorage, self)._save(name, content)
utils.py
# 獲取字符串中指定字符最后一次出現(xiàn)的位置
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
如此,最后上傳的文件名為原文件名加上年月日時(shí)分秒加上0-100的隨機(jī)數(shù)保存,效果如下:

以上這篇Django 刪除upload_to文件的步驟就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用JDAudioCrawler將下載的音頻存儲(chǔ)到本地
在當(dāng)今數(shù)字化時(shí)代,音頻數(shù)據(jù)的獲取和處理變得越來越重要,本文將訪問網(wǎng)易云音樂為案例,介紹如何使用JDAudioCrawler這個(gè)強(qiáng)大的工具,將音頻數(shù)據(jù)存儲(chǔ)下載到本地存儲(chǔ)中,需要的可以了解下2023-10-10
Python中Pickling和Unpickling的區(qū)別詳解
在本文中,我們將探討 Python 中 pickling 和 unpickling 之間的主要區(qū)別,我們將詳細(xì)討論 Python pickling 和 unpickling 的概念,包括它們的目的、語法、用法以及安全可靠的 pickling 和 unpickling 操作的注意事項(xiàng),需要的朋友可以參考下2023-09-09
Go/Python/Erlang編程語言對(duì)比分析及示例代碼
這篇文章主要介紹了Go/Python/Erlang編程語言對(duì)比分析及示例代碼,本文重點(diǎn)是給大家介紹go語言,從語言對(duì)比分析的角度切入介紹,需要的朋友可以參考下2018-04-04
Python3讀取Excel數(shù)據(jù)存入MySQL的方法
今天小編就為大家分享一篇Python3讀取Excel數(shù)據(jù)存入MySQL的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python腳本實(shí)現(xiàn)定時(shí)任務(wù)的最佳方法
我們?cè)谌粘9ぷ髦?常常會(huì)用到需要周期性執(zhí)行的任務(wù),下面這篇文章主要給大家介紹了關(guān)于Python腳本實(shí)現(xiàn)定時(shí)任務(wù)的最佳方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
使用批處理腳本自動(dòng)生成并上傳NuGet包(操作方法)
這篇文章主要介紹了使用批處理腳本自動(dòng)生成并上傳NuGet包的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11

