2017-07-12 50 views
0

我試圖從網上獲取圖像並使用圖像url將其保存到imageField中。如何從網絡獲取圖像並使用url將其保存到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 

回答

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。順便說一句。您應該在保存之前將值分配給實例()

相關問題