如何将 CloudinaryField 保存在用户命名的文件夹中
How to save CloudinaryField in a folder named by the user
我正在尝试将 models.py
中带有 CloudinaryField
的图像上传到 cloudinary。
我希望将图像上传到以这种格式命名的 cloudinary 文件夹中:users/<username>/pictures/profile
。
到目前为止,我知道我可以设置字段的 folder
和 public_id
,但我不能动态命名它。例如,我可以在 upload_to
键中传递一个函数,在 ImageField
中创建我想要的图像。有什么办法可以用 CloudinaryField
做到这一点吗??
先谢谢了!
在使用CloudinaryField时,它可以接受Upload API documentation中定义的参数。文件夹名称(或前缀)可以提供为 folder=some/target/foldername,同时使用 use_filename=True 和unique_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)
我不知道这是否是一个好的解决方案,但它是一个可行的...
我正在尝试将 models.py
中带有 CloudinaryField
的图像上传到 cloudinary。
我希望将图像上传到以这种格式命名的 cloudinary 文件夹中:users/<username>/pictures/profile
。
到目前为止,我知道我可以设置字段的 folder
和 public_id
,但我不能动态命名它。例如,我可以在 upload_to
键中传递一个函数,在 ImageField
中创建我想要的图像。有什么办法可以用 CloudinaryField
做到这一点吗??
先谢谢了!
在使用CloudinaryField时,它可以接受Upload API documentation中定义的参数。文件夹名称(或前缀)可以提供为 folder=some/target/foldername,同时使用 use_filename=True 和unique_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)
我不知道这是否是一个好的解决方案,但它是一个可行的...