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_deletefrom 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之重寫(xiě)FileField字段的保存實(shí)例
重寫(xiě)FileField字段的保存,以重命名為例
settings.py添加配置
settings.py中末尾添加配置如下,指定指向的操作文件中的類(lèi):
# 文件上傳重寫(xiě)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 FileSystemStoragefrom django.http import HttpResponsefrom django.conf import settingsimport os, time, randomfrom 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) #重寫(xiě) _save方法 def _save(self, name, content): #文件擴(kuò)展名 ext = os.path.splitext(name)[1] #文件目錄 d = os.path.dirname(name) # 定義文件名,源文件名,避開(kāi)系統(tǒng)定義的隨機(jī)字符串追加,所以避開(kāi)不用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) #重寫(xiě)合成文件名 name = os.path.join(d, filename + fn + ext) #調(diào)用父類(lèi)方法 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文件的步驟就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 利用ajax+php實(shí)現(xiàn)商品價(jià)格計(jì)算2. Spring如何集成ibatis項(xiàng)目并實(shí)現(xiàn)dao層基類(lèi)封裝3. JS圖片懶加載庫(kù)VueLazyLoad詳解4. IDEA 2020.1.2 安裝教程附破解教程詳解5. Python 解決火狐瀏覽器不彈出下載框直接下載的問(wèn)題6. Java利用TCP協(xié)議實(shí)現(xiàn)客戶(hù)端與服務(wù)器通信(附通信源碼)7. 使用AJAX(包含正則表達(dá)式)驗(yàn)證用戶(hù)登錄的步驟8. Java實(shí)現(xiàn)的迷宮游戲9. Java PreparedStatement用法詳解10. django queryset相加和篩選教程

網(wǎng)公網(wǎng)安備