Модель Django с FileField - динамический аргумент 'upload_to'
Я использую модель с FileField для работы с загрузкой файлов. Теперь файлы могут быть загружены успешно. Тем не менее, есть еще одно небольшое улучшение, которое я хочу сделать, это создать папку для пользователя с именем пользователя.
Вот код, который я пробовал
class UserFiles(models.Model):
user = models.OneToOneField(User)
file = models.FileField(upload_to='files/users/user.username/%Y_%m_%d/')
это даст папку "user.username" вместо "John" (один пример имени пользователя)
Я также пробовал другие способы, как files/users/%user.username/%Y_%m_%d/
, но это не даст папку с именем пользователя. Не знаете, каким должен быть синтаксис или возможно ли это.
Можете ли вы дать некоторые предложения по этому поводу?
Большое спасибо за вашу помощь и объяснение.
Ответы
Ответ 1
Вместо строки попробуйте передать функцию:
def generate_filename(self, filename):
url = "files/users/%s/%s" % (self.user.username, filename)
return url
class UserFiles(models.Model):
user = models.OneToOneField(User)
file = models.FileField(upload_to=generate_filename)