Django - UploadFile - 更改名称

时间:2016-01-23 12:26:01

标签: django filenames filefield

我需要使用变量名称重命名该文件。

我有这个:

    def content_file_name_Left(instance, filename):
        return 'user_{0}/Left/{1}'.format(instance.ID, filename)

...

     user_ImageLeft = models.FileField(default='', upload_to=content_file_name_Left)

我希望将其保存在:user_x / Left / user_ImageLeft 。[格式]

我有20张图片,我不想让20个函数手动写入变量的名称。

由于

1 个答案:

答案 0 :(得分:0)

刚试过这个,最好的方法似乎是使用可解构的类(解构可用于防止迁移错误):

@deconstructible
class PathAndUniqueFilename(object):
    def __init__(self, sub_path):
        self.path = sub_path

    def __call__(self, instance, filename):
        self.path = self.path.format(instance.user.id)
        return os.path.join(self.path, filename)

然后在你的模型中调用它:

user_ImageLeft = models.FileField(default='', upload_to=PathAndUniqueFilename('user_{0}/Left/'))

这样做是采用PathAndUniqueFilename('user_{0}/Left/')的参数,并在解构中使用format()以添加自定义文件夹名称。