如何从Web获取图像并使用url将其保存到imageField

时间:2017-07-12 07:26:45

标签: python django

我正在尝试从网络上获取图像并使用图片网址将其保存到imageField。

以下代码吐出错误('JpegImageFile'对象没有属性'_committed')。

from PIL import Image
import urllib.request
import io

if form.is_valid():
    instance = form.save(commit=False)

    URL = 'http://www.image.jpg'

    with urllib.request.urlopen(URL) as url:
        file = io.BytesIO(url.read())

    img = Image.open(file)

    instance.image = img

1 个答案:

答案 0 :(得分:0)

instance.image必须是django.core.files.images.ImageFile类型我正在使用此代码测试我的模型。也许它指出了正确的方向:

# This gets me a temp Image for testing. In your case it would be a real file
def get_test_image_file(tmpdir=None):

    file = tempfile.NamedTemporaryFile(suffix='.png', dir=tmpdir)
    return ImageFile(file, name=file.name)

和我做的模型测试:

def test_addimage_create(self):
    adimage = AdImage.objects.create(advertiser=self.advertiser,
                                     picture=get_test_image_file(tmpdir=MEDIA_ROOT))
    self.assertIsInstance(adimage, AdImage)

所以在你的情况下,而不是instance.image = imgimg必须是类型ImageFile的对象,然后可以将其分配给form.instance。顺便说一句。您应该在save()

之前将值分配给实例