一 使用環境
開發系統: 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)