【发布时间】:2020-08-20 17:25:12
【问题描述】:
我正在尝试使用manage.py 命令将图像添加到我的 Wagtail 网站上的模型。我找到了this post that covers it,但它使用 requests.get() 调用来自互联网的图像。我将图像保存在本地,但尝试调整链接代码失败:
from django.core.files.images import ImageFile
from wagtail.images.models import Image
path = f"{img_directory}/{filename}"
img_bytes = open(path, "rb").read()
img_file = ImageFile(BytesIO(img_bytes), name=filename)
img_obj = Image(title=filename, file=img_file)
print(img_obj.file)
img_obj.save()
print(img_obj.file) 语句确实打印了定义的文件名,但是当我尝试调用 img_obj.save() 时,出现以下错误:
django.db.utils.IntegrityError: NOT NULL constraint failed: wagtailimages_image.width
我猜我打开文件有误,它没有像我想要的那样将它作为图像读取,但我不知道我到底哪里出错了。
【问题讨论】:
-
我无法测试,但 ImageField 本质上只是 MEDIA_PATH 中的一个路径。因此,从技术上讲,您可以将文件复制到那里,然后将
img_obj.file.path设置为它所在的位置。然后您可以手动设置img_obj.file.width和img_obj.file.height。但是,您可能对它无法正常工作是正确的,因为它无法正确读取图像文件。