Удаление изображения в ведре S3 перед загрузкой нового изображения с тем же именем
У меня есть модель, которая при сохранении загружает изображение в ведро S3. Но у меня возникают проблемы, когда я хочу повторно загрузить изображение с тем же именем. (Пример: когда логотип обновляется, его нужно перезагрузить)
Поскольку изображение уже существует, Django расширяет имя пути своим собственным сгенерированным расширением, чтобы сделать его уникальным. Мы не хотим этого, мы хотим удалить существующее изображение перед загрузкой нового. Таким образом, расширение больше не будет существовать.
Я пробовал сначала удалить изображение с помощью сигнала pre_save, но это только делает мое поле изображения пустым
@receiver(pre_save, sender=geo_models.Logo)
def remove_file_from_s3(sender, instance, using, **kwargs):
instance.png.delete(save=False)
Есть ли способ сделать это?
Модель:
class Logo(models.Model):
logo_type_choices = Choices(
('ENTITY', _('Entity')),
('BRAND', _('Brand')),
)
class Meta:
verbose_name = _('logo')
verbose_name_plural = _('logos')
png = models.ImageField(
verbose_name='{0} {1}'.format('png', _('image')),
upload_to=get_upload_loc_png,
validators=[validators.validate_png_extension],
storage=storage,
max_length=200,
blank=True,
null=True,
)
logo_type = models.CharField(choices=logo_type_choices, max_length=20)
django-storages имеет необязательный параметр AWS_S3_FILE_OVERWRITE.
По умолчанию он установлен в True (reference). То есть, по умолчанию файлы с одинаковыми именами будут перезаписывать друг друга. Установите значение False, чтобы добавлялись дополнительные символы.