django-хранилища + приватное хранилище S3 - Как мне сделать имя пользователя именем папки? - PullRequest
0 голосов
/ 12 февраля 2019

Я использую django-хранилища и приватное хранилище S3 для хранения пользовательских загрузок.Я хотел бы следующую структуру папок:

/uploads/someuser321/20190112-123456/

Я, очевидно, знаю, как сделать отметку времени (2019-01-12 в 12:34:56), но как мне ввести имя пользователя пользователя в путь?Моя модель в настоящее время выглядит так:

user_file = models.FileField(
    upload_to="uploads", 
    storage=PrivateMediaStorage(), 
    null=True, blank=True)

Я могу просто добавить f-строку для метки даты / времени.Я понимаю это и знаю, как это сделать.Но как я могу добавить имя пользователя в качестве папки?Мне нужно было бы как-то получить доступ к этому из представления, чтобы я знал, кто такой request.user, но как мне вообще это сделать?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы должны сделать вызов функции внутри upload_to.Вот функция, которая поможет вам получить путь:

def get_file_path(instance, filename):
    today = localtime(now()).date()
    return '{0}/uploads/{1}/{2}'.format(instance.user.username, today.strftime('%Y/%m/%d'), filename)

Затем вам нужно вызвать его так внутри вашей модели:

user_file = models.FileField(
    upload_to=get_file_path, 
    storage=PrivateMediaStorage(), 
    null=True, blank=True)

Вам нужно исправить это выражение return, чтобы получитьжелаемый формат, но это будет делать это.Django автоматически передаст экземпляр вашей функции и имя файла.

Надеюсь, это поможет!

...