在Django模型中手动触发图片保存方法

西蒙·斯坦伯格

我有一个带有自定义图像字段的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django中手动保存OnetoOne字段

来自分类Dev

手动触发敲除视图模型页面中其他DOM元素上的click事件

来自分类Dev

我可以在Django中手动触发信号吗?

来自分类Dev

手动设置模型

来自分类Dev

在Django视图中手动更新模型的FileField

来自分类Dev

手动触发Java计时器的run()方法

来自分类Dev

如何在PySide中手动触发aboutToQuit信号

来自分类Dev

在Zurb Foundation中手动触发Abide验证

来自分类Dev

在ember.js中手动触发属性更改

来自分类Dev

如何在WPF中手动触发RelayCommand?

来自分类Dev

在discord.py中手动触发事件

来自分类Dev

如何在jqgrid中手动触发onclicksubmit事件?

来自分类Dev

在Zurb Foundation中手动触发Abide验证

来自分类Dev

如何在Telerik RadGrid中手动触发PostBackOnFilter?

来自分类Dev

在DataGridView中手动触发按钮单击事件

来自分类Dev

手动触发预定或触发功能

来自分类Dev

如何手动保存到Django的数据库?

来自分类Dev

如何在MVC 6中手动验证模型

来自分类Dev

如何触发图片上的点击事件?

来自分类Dev

手动触发 cellForRowAt 中的 didSelectRowAtIndexPath 导致实际 didSelectRowAtIndexPath 委托方法中的单元格为零

来自分类Dev

Django 1.7是否具有将日期时间字段从手动HTML格式转换为模型的自动方法?

来自分类Dev

Django 1.7是否具有将日期时间字段从手动HTML格式转换为模型的自动方法?

来自分类Dev

如何手动触发更改事件?

来自分类Dev

如何手动触发弹簧验证?

来自分类Dev

手动触发骨干视图事件

来自分类Dev

如何手动触发事件

来自分类Dev

手动触发404错误

来自分类Dev

手动触发div的click事件

来自分类Dev

手动触发触摸事件

Related 相关文章

热门标签

归档