2015-08-17 6 views
2

Вот его мой код django.Путь загрузки динамического файла Django

Я хочу загрузить файл в определенном месте, и этот путь создается динамически.

def get_upload_file(instance, filename): 
    today_date = datetime.datetime.today().date() 
    directory = 'Data/'+ str(today_date) 
    if not os.path.exists(directory): 
     os.makedirs(directory) 
    full_path = str(directory)+"/%s" %(filename) 
    print "full_path --> ",full_path 
    # user = updated_path() 
    # print user 
    return full_path 


class UploadFile(models.Model): 
    path = models.FileField(upload_to=get_upload_file) 

Я пытаюсь загрузить код выше, но я хочу, чтобы в нем был другой каталог, и его имя находится на имени пользователя.

ожидается выход

Data/2015-08-16/username/ 

тогда я хочу, чтобы загрузить файл в каталоге имя пользователя

любое решение, пожалуйста, помогите мне

+1

Что точно не работает? Вы получаете какое-то исключение? – Leistungsabfall

+0

Я не получил имя пользователя в функции get_upload_file ... как я могу получить? –

ответ

1

Наконец я получил решение указанной проблемы. Когда я создаю экземпляр класса установлен объект запроса к этому экземпляру и доступа, объект запроса в функции get_upload_file

class UploadFile(models.Model): 
     path = models.FileField(upload_to=get_upload_file) 
     reqObj = None 

     def set_reqObj(self, request): 
      self.reqObj = request 

new_file = UploadFile(path = afile) 
new_file.set_reqObj(request) 

использование reqObj в get_upload_file функции

instance.reqObj.user.username 

обновлена ​​функция get_upload_file является

def get_upload_file(instance, filename): 
    today_date = datetime.datetime.today().date() 
    directory = 'Data/'+ str(today_date)+'/'+instance.reqObj.user.username 
    if not os.path.exists(directory): 
     os.makedirs(directory) 
    full_path = str(directory)+"/%s" %(filename) 
    return full_path