Мне нужно сохранить без полного пути к файлу также имя файла. Я делаю так:Как сохранить имя файла загруженного файла в модели
class Photo(models.Model):
photo = models.ImageField(upload_to = settings.PATH_PHOTOS_SOURCE)
user = models.ForeignKey(UserProfile, editable=False)
item = models.ForeignKey(Item, default=0)
filename = models.CharField(max_length=100, default='', editable=False)
def save(self, *args, **kwargs):
self.filename = os.path.basename(self.photo.url)
super(Photo, self).save(*args, **kwargs)
Это работа, но существуют случаи, когда файл с существующим именем уже существует, и Offcourse в диске файл записи example_1.jpg, example_2.jpg, но в имени файла сохранения некорректное имя файла example.jpg
я изменил метод сохранения так:
def save(self, *args, **kwargs):
super(Photo, self).save(*args, **kwargs)
self.filename = os.path.basename(self.photo.url)
super(Photo, self).save()
это работа, но я не люблю этот код, может быть, более элегантный код.
Я пытался сделать это с помощью сигналов, но у меня была проблема с сохранением рекурсии.
Спасибо. Отличная идея. – yAnTar