如何在Django模型中将选项传递给CloudinaryField?

时间:2016-04-23 00:19:29

标签: django django-models cloudinary

我目前正在使用Cloudinary和Django来存储用户个人资料图片,并希望将参数传递给它将其存储在一个文件夹中,并覆盖现有图像而不是创建一个新图像。

在我的用户模型中:

picture = CloudinaryField('image')

这与Django Admin和表单一样正常。我只想将它存储在users / USERNAME / profile文件夹中,当有人更新他们的图片以删除旧图片时。

3 个答案:

答案 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'})