Django Admin 刪除檔案同時刪除資原始檔(delete_upload_files)
阿新 • • 發佈:2020-08-19
一 使用環境
開發系統: windows
IDE: pycharm
資料庫: msyql,navicat
程式語言: python3.7 (Windows x86-64 executable installer)
虛擬環境: virtualenvwrapper
開發框架: Django 2.2
二 Django Admin刪除檔案同時刪除資源(圖片檔案)
1.都在 admin.py 中設定
import os from django.db.models.signals import post_delete from django.dispatch importreceiver from django.conf import settings
1.1 標準方法,sender=Company,Company是models模型類名,不是註冊admin模型名,'公司logo'為欄位名
# 刪除檔案同時刪除資源圖片檔案(公司logo) @receiver(post_delete, sender=Company) def delete_upload_files(sender, instance, **kwargs): files = getattr(instance, '公司logo') if not files: returnfname = os.path.join(settings.MEDIA_ROOT, str(files)) if os.path.isfile(fname): os.remove(fname)
1.2 非標準方法,目的都是把路徑拼接正確
# 刪除檔案同時刪除資源圖片檔案(圖片條碼) @receiver(post_delete, sender=UserProfile) def delete_upload_files(sender, instance, **kwargs): files = getattr(instance, '圖片條碼') ifnot files: return # 欄位屬性為ImageField,儲存時前面加了media,不然儲存不到media下,這裡取值時要把media去除. fname = os.path.join(settings.MEDIA_ROOT, str(files)[6:]) if os.path.isfile(fname): os.remove(fname)