带FileField的Django模型 - 动态'upload_to'参数

时间:2013-07-09 04:06:51

标签: django django-models filefield

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

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

1 个答案:

答案 0 :(得分:22)

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

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)