13

我正在使用带有 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/ ,但它不会给文件夹提供用户名。不确定语法应该如何或是否可能。

你能对此提出一些建议吗?非常感谢您的帮助和解释。

4

1 回答 1

25

尝试传递函数而不是字符串:

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)
于 2013-07-09T04:10:40.817 回答