我目前正在使用Cloudinary和Django来存储用户个人资料图片,并希望将参数传递给它将其存储在一个文件夹中,并覆盖现有图像而不是创建一个新图像。
在我的用户模型中:
picture = CloudinaryField('image')
这与Django Admin和表单一样正常。我只想将它存储在users / USERNAME / profile文件夹中,当有人更新他们的图片以删除旧图片时。
答案 0 :(得分:3)
这非常有效:
from cloudinary.models import CloudinaryField as BaseCloudinaryField
from django.db import models
class CloudinaryField(BaseCloudinaryField):
def upload_options(self, model_instance):
return {
'public_id': model_instance.name,
'unique_filename': False,
'overwrite': True,
'resource_type': 'image',
'tags': ['map', 'market-map'],
'invalidate': True,
'quality': 'auto:eco',
}
class MarketMap(models.Model):
name = models.CharField(max_length=17)
image = CloudinaryField()
答案 1 :(得分:1)
您还可以将这些选项添加到表单字段中,如下所示:
image = CloudinaryFileField(
label='My image',
options={
'tags': "module, home",
'format': 'jpg',
'crop': 'limit',
'width': 640
},
required=False)
答案 2 :(得分:1)
我花了一段时间才意识到 - 基于我在StackOverflow中看到的问题,其他人也不清楚 - CloudinaryField和CloudinaryFileField看起来相似但是是不同的类。 CloudinaryField是一个Model类,而CloudinaryFileField是一个Form类。指定文件路径或标记的选项在FORM级别使用CloudinaryFileField(See Image Upload API documentation)
完成from cloudinary.forms import CloudinaryFileField
# Note - cloudinary folders are specified at the FORM level and not in the MODEL
class EditPhotoForm(ModelForm):
class Meta:
model = Photo
fields = ('name', 'description', 'image', 'slug')
image = CloudinaryFileField(options={'folder' : 'media/photos/', 'tags': 'landscapes'})