1. 程式人生 > 實用技巧 >Django Admin 刪除檔案同時刪除資原始檔(delete_upload_files)

Django Admin 刪除檔案同時刪除資原始檔(delete_upload_files)

一 使用環境

  開發系統: 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 import
receiver 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:
        return
fname = 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, '圖片條碼')
    if
not files: return # 欄位屬性為ImageField,儲存時前面加了media,不然儲存不到media下,這裡取值時要把media去除. fname = os.path.join(settings.MEDIA_ROOT, str(files)[6:]) if os.path.isfile(fname): os.remove(fname)