Python 将图像从BytesIO上载到ImageField

Python 将图像从BytesIO上载到ImageField,python,django,Python,Django,我想上传一个生成的图像直接在我的模型保存,而不必先保存到文件 型号: avatar=models.ImageField(上传到=“img/”,null=True,blank=True) 这是我的generate_avatar类 def generate(cls, size, string, filetype="JPEG"): """ Generates a squared avatar with random background color. :par

我想上传一个生成的图像直接在我的模型保存,而不必先保存到文件

型号:

avatar=models.ImageField(上传到=“img/”,null=True,blank=True)

这是我的
generate_avatar

def generate(cls, size, string, filetype="JPEG"):
    """
        Generates a squared avatar with random background color.

        :param size: size of the avatar, in pixels
        :param string: string to be used to print text and seed the random
        :param filetype: the file format of the image (i.e. JPEG, PNG)
    """
    render_size = max(size, Avatar.MIN_RENDER_SIZE)
    image = Image.new('RGB', (render_size, render_size),
                      cls._background_color(string))
    draw = ImageDraw.Draw(image)
    font = cls._font(render_size)
    text = cls._text(string)
    draw.text(cls._text_position(render_size, text, font),
              text,
              fill=cls.FONT_COLOR,
              font=font)
    stream = BytesIO()
    image = image.resize((size, size), Image.ANTIALIAS)
    image.save(stream, format=filetype, optimize=True)
    return stream.seek(0)
但是,这不起作用,没有错误只保存0。为什么?

要在django中“模拟”文件上载,请查看django的SimpleUploadedFile,并执行以下操作:

from django.core.files.uploadedfile import SimpleUploadedFile

def save(self, *args, **kwargs)
    avatar = Avatar.generate(128, self.display_name, "PNG")
    self.avatar = SimpleUploadedFile(avatar.name, avatar.read())

我不知道它的存在。我现在上传了,但是图像是空白的(将图像保存到文件工作),因此
返回流。seek(0)
一定不正确,也尝试了
返回流
SimpleUploadedFile
需要
一些文件描述符。read()
尝试
返回流
SimpleUploadedFile(avatar.name,avatar.read1())
如中所示
from django.core.files.uploadedfile import SimpleUploadedFile

def save(self, *args, **kwargs)
    avatar = Avatar.generate(128, self.display_name, "PNG")
    self.avatar = SimpleUploadedFile(avatar.name, avatar.read())