我有一个带有自定义图像字段的Django模型。图片字段会在上传时创建一些缩略图尺寸。代码可能看起来像这样:
from django.db import models
from utils import CustomImageField
class Photo(models.Model):
image = CustomImageField()
现在,我修改了原始图像,假设我旋转了它。现在,我想再次触发图像字段的save方法,以覆盖缩略图并创建旋转的版本。因此,我无需在代码(DRY)的其他位置旋转缩略图。
有什么想法吗?遵循这些原则-但究竟如何呢?
p = Photo.objects.get(pk=1)
p.image.save(...)
我对CustomImageField
小部件拥有完全控制权。该save()
方法定义为:
def save(self, name, path, save=True):
问题是,我该如何使用方法参数?
这个问题看起来像是将图像以编程方式保存到Django ImageField的副本
该ImageField.save()
方法的参数已记录FileField.save()
(属于其ImageField
子类):https : //docs.djangoproject.com/zh-CN/1.9/ref/models/fields/#django.db.models.fields.files.FieldFile.save
接受两个必需的参数:name是文件名,content是包含文件内容的对象。可选的save参数控制在更改与该字段关联的文件之后是否保存模型实例。默认为True。
这是为我们工作的东西:
class CustomImage(models.Model):
image = models.ImageField(upload_to=get_file_path, max_length=500)
orig_name = models.TextField()
这是一种将图像文件从http资源添加到ImageField的方法:
from django.core.files.base import ContentFile
def download_photo(amazon_id, url):
img_data = requests.get(url)
img = CustomImage(orig_name=img_data.url)
img.image.save(slugify(img.orig_name), ContentFile(img_data.content), save=True)
在没有ContentFile的情况下也可以使用:
new_img = File(open(different_obj.image.path), 'r')
img.image.save(different_obj.image.url, new_img, save=True)
另请参阅:-https : //docs.djangoproject.com/zh-CN/1.9/topics/files/--https : //djangosnippets.org/snippets/2587/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句