Я написал собственный метод delete
для модели. Похоже, что он работает с двумя оговорками.
Когда я вхожу в экземпляр модели внутри Django Admin и нажимаю удалить, тогда файл удаляется из корзины AWS S3 (что была цель переопределения метода в первую очередь). Сама модель также удаляется.
Если я удаляю с помощью функции «Удалить выбранное», то файл задерживается на S3, но экземпляр удаляется из списка экземпляров этого type.
Насколько я понимаю, при массовом удалении вызывается другой метод (queryset).
Мой вопрос: какой самый эффективный способ заставить одинаковые и массовые удаления действовать одинаково? Стоит ли пытаться создать собственный менеджер для этой модели?
Объявление модели и метод удаления:
from boto3.session import Session
from django.conf import settings
class Video(models.Model):
title=models.CharField(max_length=500)
description=models.TextField(default="")
creation_date=models.DateTimeField(default=timezone.now)
videofile=models.FileField(upload_to='videos/', null=True, verbose_name="")
tags = TaggableManager()
actions = ['delete']
def __str__(self):
return self.title + ": " + str(self.videofile)
def delete(self, *args, **kwargs):
session = Session (settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
s3_resource = session.resource('s3')
s3_bucket = s3_resource.Bucket(settings.AWS_STORAGE_BUCKET_NAME)
file_path = "media/" + str(self.videofile)
response = s3_bucket.delete_objects(
Delete={
'Objects': [
{
'Key': file_path
}
]
})
print(file_path)
print(response)
super(Video, self).delete(*args, **kwargs)