Django - FileField动态设置upload_to

时间:2014-07-05 12:44:51

标签: python django

例如我必须使用django应用程序

- project
-- photo 
-- attachments

我创建模型,我保留我的tmp文件

# python 3.4
class UploadedFiles(models.Model):
    file = models.FileField(upload_to='photo/%Y/%m/%d')

但我希望将此表用于所有上传文件并动态更改upload_to

我想到了并写了它

# python 3.4
def get_path(instance, filename):
    filename, file_ext = os.path.splitext(filename)

    return instance.path.format(filename, file_ext)


class UploadedFiles(models.Model):
    path = models.CharField(max_length=100)
    file = models.FileField(upload_to=get_path, blank=True)

所以,首先我创建新条目

# python 3.4
uf = UploadedFiles.path = 'attachments/%Y/%m/%d/{0}.blabla.{1}'
uf.save()

接下来我保存文件

uf.file = file
uf.save()

确定。它的作品看起来很糟糕。我怎么能正常做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

你是说这个?

from django.core.files import File, ContentFile

uf = UploadedFiles(path='...', file=File(fp))
# Or
uf = UploadedFiles(path='...', file=ContentFile(file_content))
uf.save()

此外,如果您将'%Y'指定为函数,upload_to不起作用,如果我没记错的话。