Я хочу, чтобы имена файлов, чтобы быть случайным и поэтому я использую upload_to
функцию, которая возвращает случайное имя файла, как так:Django: Как сохранить исходное имя файла в FileField?
from uuid import uuid4
import os
def get_random_filename(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
Однако я хотел бы сохранить исходное имя файла с атрибутом внутри модели. Что-то вроде этого не работает:
def get_random_filename(instance, filename):
instance.filename = filename
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)
# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
filename = models.CharField(max_length=128)
Как это сделать?
спасибо.
Он отлично работает в моих тестах. Как именно он не работает для вас? Что происходит? Может быть, проблема в коде зрения? – rantanplan
как только вы это сделаете и запросите объект из db, вы все еще видите значение для имени файла? – miki725
Да. Я действительно протестировал его внутри оболочки. Я убил его, запустил его снова, и там было имя файла. На самом деле сначала я думал, что вы просто забыли сделать 'instance.save()' внутри get_random_filename. Но, похоже, это не нужно. – rantanplan