【问题标题】:Django model with FileField -- dynamic 'upload_to' argument带有 FileField 的 Django 模型——动态“upload_to”参数
【发布时间】:2013-07-06 13:23:00
【问题描述】:

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

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

【问题讨论】:

标签: django django-models filefield


【解决方案1】:

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

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)

【讨论】:

  • 您好,非常感谢您的回答,第一个解决方案效果很好。第二个,用户对象的用户名,即user.username 无法识别。
  • 尝试将str(user.username) 更改为str(user),不客气! :D
  • 这会将 作为文件夹的名称
  • 嗯,它正在返回OneToOneField 实例,所以我认为你必须选择第一个选项。
  • @DeadDjangoDjoker 你只需要保存对象,函数在保存之前被自己执行:D
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多