Django Admin ファイルを削除、リソース ファイルも削除(delete_upload_files)
1.モジュール
import os
from django.conf import settings
from django.db import models
# Create your models here.
from django.db.models.signals import post_delete
from django.dispatch import receiver
from utils.model import BaseModel
2.モデル
class ExcelLocalFile(BaseModel):
excel_file = models.FileField(upload_to='excel_local/', verbose_name='excel file', blank=True, null=True, default=None, help_text='excel file')
class Meta:
db_table = 'tb_excel_local_uploadfile'
verbose_name = 'excel file'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.excel_file}'
3.models.py にリスナーを追加
リスナーを追加し、管理バックエンドがファイル オブジェクトを削除すると、サーバー ファイルも削除される。
@receiver(post_delete, sender=ExcelLocalFile)
def delete_upload_files(sender, instance, **kwargs):
files = getattr(instance, 'excel_file')
print(files)
if not files:
return
file_name = os.path.join(settings.MEDIA_ROOT, str(files))
if os.path.isfile(file_name):
os.remove(file_name)
この記事が気に入ったらサポートをしてみませんか?