У меня есть модель с атрибутом ImageField.
Я обновляю объекты модели с помощью администратора django, и мне нужно было что-то удалить старое изображение, когда новое изображение загружается при попытке обновить объект.
Итак, я создал сигнал pre_save
, который должен удалять старый файл изображения с сервера, когда пользователь пытается обновить объект модели.
Проблема заключается в следующем: когда пользователь обновляет атрибуты объектакроме атрибута ImageField, сигнал по-прежнему удаляет локально сохраненный файл изображения.
Как изменить сигнал на удаление файла, только если в django admin был выбран новый файл?
Другими словами, мне нужно проверить, загрузил ли пользователь файл при попытке обновить объект в django admin.
ВАЖНОЕ ПРИМЕЧАНИЕ: Мой сигнал работает со многимимодели .. и я должен держать это так.
Вот код сигнала:
@receiver(pre_save)
def pre_save_image_delete(sender, instance, **kwargs):
if not valid_model(sender.__name__):
return
# Get file path on the server
path = get_photo_path(sender.__name__, instance.pk)
# delete the file if it exists
if path and file_exists(path):
delete_file(path)