Как проверить, было ли загружено поле FileField?

Я хочу хранить "оригинальное" имя файла при загрузке. Это нужно потому, что файл сохраняется с uuid в качестве нового имени. Поэтому я написал следующее для своей модели:

 def save(self, *args, **kwargs):
         if self.file:
             self.original_filename = self.file.name
         super(MediaFile, self).save(*args,**kwargs)

Однако, он также сохраняет имя файла в self.original_filename, когда ничего нового не было загружено. Таким образом, имя original_filename становится uuid во второй раз, когда я сохраняю эту модель (например, обновляя какое-то другое поле в админке).

Как проверить в функции сохранения, действительно ли поле FileField было обновлено и файл был загружен? Если возможно, я хотел бы выполнить эту проверку в модели, чтобы mit работал как для админки, так и для пользовательских страниц загрузки.

Вы можете настроить метод __init__ для хранения исходного файла. Это позволит вам получить исходный файл в методе save() и сравнить его с новым файлом.

        __original_file = None

        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.__original_file = self.file

        def save(self, *args, **kwargs):
            if self.file:
                if self.file != self.__original_file:
                    self.original_filename = self.file.name

            super(MediaFile, self).save(*args,**kwargs)
            self.__original_file = self.file
Вернуться на верх