2017-01-10 74 views
1

我下面這個答案來獲取圖像,並將其存儲在我的模型:Programmatically saving image to Django ImageFieldDjango的存儲靜態資產圖像,但不保存文件路徑DB

我想將圖像存儲在靜態資產,也在模型屬性Product.large_image_file上存儲該圖像的路徑。

當我在shell_plus中手動執行此代碼時,圖像被成功下載並存儲,並且文件路徑已成功保存在數據庫中。

當使用Django runserver執行代碼時,圖像被下載並添加到靜態文件中,但路徑未存儲在數據庫中。

完全相同的代碼在shell_plus中工作,但不能與runserver一起使用。

我用ipdb來進入runserver環境,當我檢查each.large_image_file時,它給了我正確的路徑,但是這個路徑並沒有保存到數據庫中,即使我手動調用each.save()。

任何想法將不勝感激!

def get_product_images(): 
     # Download images from the URL and save it to static assets and the path to the model 

     product_photos = Product.objects.all() 

     for each in product_photos: 

      if each.large_image_url is not None and len(each.large_image_url) > 0: 

       try: 
        #check if the file is already stored 
        each.large_image_file.url 

        #error is raised if the file does not exist, retrieve and store the file 
       except ValueError: 
        result = urllib.request.urlretrieve(each.large_image_url) 

        each.large_image_file.save(os.path.basename(
         each.large_image_url), 
         File(open(result[0], 'rb')) 
        ) 
        each.save() 
+1

除了不應該是一個通用的。請指定你想要捕捉的一個(我認爲AttributeError)。我不是說這是這裏的問題,只是指出你應該擺脫 – e4c5

+0

檢查實例pk的習慣。並看看你是否有任何交易 – e4c5

+0

@ e4c5是剛更新了該建議和一些更多的細節。這個函數在shell中完美工作,但仍然沒有在模型屬性each.large_image_file上存儲路徑 –

回答

0

看來我做了noob錯誤,並且在調用它時沒有將Product類作爲參數傳遞到get_product_images()。我在shell中手動導入產品,這就是爲什麼它在那裏工作。

從我的視圖函數中調用get_product_images(Product)現在可以使用。