見出し画像

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)

この記事が気に入ったらサポートをしてみませんか?