具有upload_to的Django FileField在运行时确定

问题:

我正在尝试设置我的上传,以便如果用户joe上传一个文件,它将转到MEDIA_ROOT / joe,而不是让所有人的文件进入MEDIA_ROOT。问题是我不知道如何在模型中定义这个。这是现在的样子:

class Content(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to='.')

所以我想要的不是’。作为upload_to,它是用户的名字。
我明白,从Django 1.0开始,你可以定义自己的函数来处理upload_to,但是这个函数不知道用户是谁,所以我有点失落。
谢谢您的帮助!

回答:

你可能读过the documentation,所以这里有一个很简单的例子来说明这一点:

def content_file_name(instance, filename):
    return '/'.join(['content', instance.user.username, filename])

class Content(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User)
    file = models.FileField(upload_to=content_file_name)

你可以看到,甚至不需要使用文件名,如果你喜欢,你也可以在你的upload_to中调用它。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Django FileField with upload_to determined at runtime

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 29 = 33