Как проверить, был ли выбран новый файл в django admin с помощью сигнала pre_save? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть модель с атрибутом 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)

1 Ответ

0 голосов
/ 29 сентября 2018

Вот решение после многих попыток:

if str(photo.path) == str(photo.file):
    return

Приведенный выше код будет верен только в том случае, если во время обновления объекта не было загружено ни одного нового файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...