Django将图像存储在静态资源中但不保存文件路径在DB

时间:2017-01-10 05:07:25

标签: python django

我正在按照这个答案获取图片并将其存储在我的模型中:Programmatically saving image to Django ImageField

我想将图像存储在静态资源中,并且还将该图像的路径存储在模型属性Product.large_image_file中。

当我在shell_plus中手动执行此代码时,映像已成功下载并存储,并且文件的路径已成功保存在DB中。

当使用Django runserver执行代码时,会下载图像并将其添加到静态文件中,但路径不会存储在数据库中。

完全相同的代码在shell_plus中有效,但不适用于runserver。

我使用ipdb进入runserver环境,当我检查each.large_image_file时,它给了我正确的路径但是该路径没有保存到DB中,即使我手动调用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 个答案:

答案 0 :(得分:0)

看来我正在犯一个noob错误,并且在调用它时没有将Product类作为参数传递给get_product_images()。我在shell中手动导入了Product,这就是它在那里工作的原因。

现在可以从我的视图功能调用get_product_images(Product)。