将Cloudinary图像上传链接到Django模型字段

8
我已经阅读了Cloudinary Django 文档和许多StackOverflow问题,但我仍然在努力解决这个基本问题。我想将图像作为数据迁移的一部分上传到Cloudinary模型字段(类CloudinaryField)中。
我的模型定义如下:
# model definition
from cloudinary.models import CloudinaryField
from django.contrib.gis.db import models

class UserProfile(models.Model):
    name = models.CharField(max_length=200)
    logo = CloudinaryField(blank=True, null=True)

这个模型运行良好,我可以在管理界面上传图片并在模板中访问它,但是我想编写数据迁移程序以便我可以向此模型上传多个图片。我的迁移程序无法正常工作,结构如下:
# migration file to upload logos
import cloudinary

# get all user instances
users = UserProfile.objects.all()

# loop through users, and update logo
for user in users:
    user.logo = cloudinary.uploader.upload("https://url/to/logo/logo.png")
    user.save()

我知道如果我使用cloudinary.uploader.upload("image.png"),会得到类似下面的结果:
{u'secure_url': u'https://res.cloudinary.com/mysite/image/upload/111/111.png', u'public_id': 111', u'format': u'png', u'url': u'http://res.cloudinary.com/mysite/image/upload/v1444253137/111.png', u'created_at': u'2015-10-07T21:25:37Z', u'tags': [], u'bytes': 7974, u'height': 35, u'width': 290, u'version': 1444253137, u'etag': u'aaa', u'original_filename': u'logo', u'signature': u'111', u'type': u'upload', u'resource_type': u'image'}

我无法确定是否可以使用Cloudinary将上传的文件与模型字段相关联。所有文档(和示例代码)都没有显示如何将上传响应与模型字段相关联。有一些使用Web表单的示例,但如果可能的话,我更愿意避免使用它。


1
确实非常感谢。这个问题是关于无价值的upload_resource解释,只有这篇文章在一年后才解释清楚了。 - raratiru
没错!令人震惊的是他们的文档中没有解释这个。 - djq
2个回答

7

请尝试使用以下内容:

user.logo = cloudinary.uploader.upload_resource("https://url/to/logo/logo.png")

这应该会奏效。


太棒了,我需要手动保存一个模型...我已经花了几个小时查看文档和源代码__doc__...只有在这里才解释了upload_resource。哇! - raratiru
upload_resource 也适用于本地文件,它们不必被托管。 - Zerkz

1
我联系了Cloudinary支持并链接到了这个问题,他们的回答如下:

您是否仔细阅读了文档?具体来说,Python模型主题在此处讨论: http://cloudinary.com/documentation/django_image_upload#django_forms_and_models

我的结论是,Cloudinary不支持我想要的功能,这让我感到惊讶,因为它似乎非常基本。
所以,我猜我可以制作一个表单,使用其中的数据伪造一个请求,以便上传文件并将其与模型关联。这似乎有点疯狂,但我看不出还有什么其他选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接