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 中(也可以寫到models.py中),delete_upload_files方法必需放到admin模型類的下方,放上面就不能執行.

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\共5位去除,拼接路徑從第6位開始,數據庫中存儲為(media\code\RY0001.png).
    fname = os.path.join(settings.MEDIA_ROOT, str(files)[6:])
    if os.path.isfile(fname):
        os.remove(fname)

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM