通过 request.get 在 Django 中保存图像

Chr*_*gin 5 python django image request python-3.x

因此,我尝试使用 request.get 从网络中提取图像并将其保存到 django 数据库中。这是一些代码如下以及我尝试过的步骤:

我的模型(只是需要的部分,不是全部)

class Pistol(models.Model):
    gun_id = models.CharField(max_length=255)
    manufacturer = models.CharField(max_length=255, blank=True)
    model = models.CharField(max_length=255, blank=True)
    image = models.ImageField(upload_to='img/inventory', blank=True)
Run Code Online (Sandbox Code Playgroud)

我的代码(我是从 shell 中执行此操作,因此看起来可能有点无组织)

import request

r = requests.get('http://media.server.theshootingwarehouse.com/small/2451.jpg')
item = Pistol(gun_id="1", price=400, image="1.jpg")
item.image.save('1.jpg',r.content)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误

AttributeError: 'bytes' object has no attribute 'read' 
Run Code Online (Sandbox Code Playgroud)

请注意,我正在工作python3

Dim*_*zis 2

对于python3我创建了一个管理命令我希望它可以帮助你

import requests
from django.core.files.base import ContentFile
from django.core.management.base import BaseCommand, CommandError
from app.models import MyModel


class Command(BaseCommand):
    help = 'save images to MyModel table'


   def handle(self, *args, **options):
     for model in MyModel.objects.all():
        url = 'url_path_to_image'
        r = requests.get(url)
        if r.status_code == 200:
            data = r.content
            filename = url.split('/')[-1]
            model.image.save(filename, ContentFile(data))
            model.save()
            print(model.pk)
    self.stdout.write(self.style.SUCCESS('Successfully saved MyModel images'))
Run Code Online (Sandbox Code Playgroud)