如何将 CloudinaryField 保存在用户命名的文件夹中

How to save CloudinaryField in a folder named by the user

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

在使用CloudinaryField时,它可以接受Upload API documentation中定义的参数。文件夹名称(或前缀)可以提供为 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')

基于 (建议的答案无效),我能够想出的唯一解决方案是覆盖 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())) 
    super().pre_save(model_instance, add)

我不知道这是否是一个好的解决方案,但它是一个可行的...