我在Django中使用cloudinary
,我需要复制一个模型实例,其中也包含一个CloudinaryField
。我知道如何在Django中复制模型实例,但是我不知道如何复制图像。
这是我的模特:
class CustomImage(models.Model):
image = CloudinaryField("image", null=True, blank=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
这是我对该模型实例的重复代码:
image = CustomImage.objects.get(id=1)
image.pk = None
image.save()
问题是,两个实例现在都分配了相同的图像,因此,如果我删除一个,则另一个实例也将被删除。如何正确复制cloudinary中的现有图像?
我能够弄清楚。在选项overwrite
设置为False
的情况下上传图像很容易。另外,我们需要创建一个新的CloudinaryResource
并将其分配给image
实例的CustomImage
字段。
import cloudinary
from cloudinary import CloudinaryResource
image = CustomImage.objects.get(id=1)
image.pk = None
# cloudinary image duplication
cloudinary_resource = image.image
cloudinary_url = cloudinary_resource.url
response = cloudinary.uploader.upload(
cloudinary_url, options={"overwrite": False}
)
public_url = response["public_id"]
resource_type = response["resource_type"]
duplicated_image = CloudinaryResource(
public_id=public_url, resource_type=resource_type
)
image.image = duplicated_image
image.save()