django 如何将CloudinaryField保存在用户指定的文件夹中

sq1bmfud  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(72)

我试图上传一个图像到cloudinary与CloudinaryField在我的models.py。我希望将图像上传到cloudinary中的一个文件夹中,以这种格式命名:users/<username>/pictures/profile。到目前为止,我知道我可以设置字段的folderpublic_id,但我不能动态命名它。例如,我可以在upload_to中传递一个函数,在ImageField中创建图像。有什么方法可以用CloudinaryField做到这一点吗??Thank ahead!

aor9mmx1

aor9mmx11#

基于this question(建议的答案不起作用),我能想到的唯一解决方案是像这样覆盖pre_save

class CloudinaryField(CloudinaryField):
def upload_options(self, instance):
    return {
        'folder': "users/{0}/cats/{1}".format(instance.owner.username,instance.name),
        'public_id': 'profile',
        'overwrite': True,
        'resource_type': 'image',
        'quality': 'auto:eco',
    }
def pre_save(self, model_instance, add):
    self.options =  dict(list(self.options.items()) + list(self.upload_options(model_instance).items())) 
    return super().pre_save(model_instance, add)

字符串
我不知道这是不是一个好的解决方案,但这是一个工作的一个...

vfwfrxfs

vfwfrxfs2#

在使用 CloudinaryField 时,它可以接受Upload API文档中定义的参数。文件夹名称(或前缀)可以提供为 folder=some/target/foldername,而同时使用 use_filename=Trueunique_filename=False 将设置 public_id 以使用资源的文件名。否则,使用动态值也可以设置为 public_id=some-dynamic-custom-value
举例来说:

image = CloudinaryField('image',
                        public_id='dynamicpublicid',
                        use_filename=True,
                        unique_filename=False,
                        folder='users/username/pictures/profile')

字符串

相关问题