2013-07-09 4 views
10

Я использую модель с FileField для работы с загрузкой файлов. Теперь файлы могут быть загружены успешно. Тем не менее, есть еще одно небольшое улучшение, которое я хочу сделать, а именно создать папку для пользователя с именем пользователя.Django model with FileField - динамический аргумент 'upload_to'

Вот код, который я пытался

class UserFiles(models.Model): 
    user = models.OneToOneField(User) 
    file = models.FileField(upload_to='files/users/user.username/%Y_%m_%d/') 

это даст папку «user.username» вместо «Джон» (один пример имени пользователя)

Я также пробовал другие способами, такими как files/users/%user.username/%Y_%m_%d/ , но это не дало бы папку с именем пользователя. Не знаете, как синтаксис должен быть, или это возможно.

Можете ли вы дать несколько предложений по этому вопросу? Большое спасибо за вашу помощь и объяснение.

+0

http://stackoverflow.com/questions/1190697/django-filefield-with-upload-to-determined-at-runtime?rq=1 решение найдено по этой ссылке – Mona

ответ

20

Вместо строки попробуйте передать функцию:

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) 
+0

привет, большое спасибо за ваш ответ, первое решение работает нормально. Второй, имя пользователя пользовательского объекта, т. Е. user.username не может быть распознано. – Mona

+0

try changging 'str (user.username)' for 'str (user)', Добро пожаловать! : D –

+0

, который дал бы как имя папки – Mona

Смежные вопросы