Django - 动态设置FileField的upload_to

0 投票
1 回答
1218 浏览
提问于 2025-04-18 12:11

比如说,我有两个Django应用。

- project
-- photo 
-- attachments

然后我创建了一个模型,用来存放我的临时文件。

# 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

你是指这个吗?

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 设置为一个函数时是不能用的。

撰写回答