python - 将 BytesIO 保存到 Django ImageField

标签 python django django-models screenshot imagefield

我有一个网页抓取工具,我想下载它正在抓取的页面的图像,并将其保存为 Django 模型中的“屏幕截图”ImageField。我正在使用此代码:

def save_screenshot(source,screenshot):
    box = (0, 0, 1200, 600)
    im = Image.open(io.BytesIO(screenshot))
    region = im.crop(box)
    tempfile_io = io.BytesIO()
    region.save(tempfile_io, 'JPEG', optimize=True, quality=70)
    source.screenshot.save(source.slug_name+"-screenshot",ContentFile(tempfile_io.getvalue()),save=True)

它将屏幕截图保存到/media/news_source_screenshots/目录,但不会将其保存到模型中。模型字段定义为:
screenshot = models.ImageField(upload_to='news_source_screenshots',blank=True,null=True)

我错过了什么?

最佳答案

所以事实证明上面的代码效果很好!问题是我正在使用这样的一段代码调用上述方法:

source = NewsSource.objects.get(name=name)
html,screenshot = get_url(source.url)
save_screenshot(source,screenshot)
source.save()

所以 save_sceenshot 方法起作用了,但是它所做的工作被我的 source.save() 调用覆盖了。去搞清楚!

关于python - 将 BytesIO 保存到 Django ImageField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41403475/

相关文章:

django - 如何在模板代码中设置变量的值?

Django 表单; 'bool' 对象没有属性 'get'

django - 如何从 2456 这样的特定数字开始 Django 模型自动递增键?

python - 为什么这两行代码不会产生相同的结果?

python - 在从另一个用 C 实现的类驱动的类上使用元类

python - Django 查询集是否带有预取?

Django "The submitted file is empty"

python - 使用多个条件遍历数据框的正确方法

运行 Django 命令的 Python 脚本

python - 如何将用户与 django 中的帖子关联起来并根据登录的用户显示数据?