我正在按照这个答案获取图片并将其存储在我的模型中: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()
答案 0 :(得分:0)
看来我正在犯一个noob错误,并且在调用它时没有将Product类作为参数传递给get_product_images()。我在shell中手动导入了Product,这就是它在那里工作的原因。
现在可以从我的视图功能调用get_product_images(Product)。