我正在使用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/
之类的其他方法
,但它不会给文件夹提供用户名。不确定语法应该如何或是否可行。
你能就此提出一些建议吗? 非常感谢你的帮助和解释。
答案 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)