django-storages +专用S3存储桶-如何使用户名成为文件夹名称?

时间:2019-02-12 00:57:38

标签: django amazon-s3 django-models boto3 django-storage

我正在使用django-storages和一个专用的S3存储桶来存储用户上传的内容。我想要以下文件夹结构:

/uploads/someuser321/20190112-123456/

我显然知道如何进行时间戳记(2019-01-12 at 12:34:56),但是如何将用户的用户名放入路径中呢?我的模型当前如下所示:

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

我可以为日期时间/时间戳添加一个f字符串。我了解这一点,而且我知道该怎么做。但是,如何将用户的用户名也添加到文件夹中?我需要从视图中以某种方式访问​​它,以便知道谁是request.user,但是我什至会怎么做?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您需要在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会自动将实例传递给您的函数和文件名。

希望对您有帮助!