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

Mon*_*ona 12 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/')
Run Code Online (Sandbox Code Playgroud)

这会给'user.username'文件夹而不是'John'(用户名的一个例子)

我也尝试过其他方法files/users/%user.username/%Y_%m_%d/ ,但它不会给用户名这个文件夹.不确定语法应该如何或是否可行.

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

Vic*_*res 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)
Run Code Online (Sandbox Code Playgroud)