Как проверить, было ли загружено поле 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