名称 'InMemoryUploadedFile' 未在 Django 模型中定义?

name 'InMemoryUploadedFile' is not defined in django model?

基本上我有一个带有文件字段的 Django 模型。我想调整提交的图片大小,我这里有这段代码可以做到这一点

def save(self, *args, **kwargs):
    img = Image.open(self.media)

    output = BytesIO()

    original_width, original_height = img.size
    aspect_ratio = round(original_width / original_height)
    desired_height = 100
    desired_width = desired_height * aspect_ratio

    img = img.resize((desired_width, desired_height))

    img.save(output, format='JPEG', quality=90)
    output.seek(0)

    self.image = InMemoryUploadedFile(output, 'ImageField', "%s.jpg" % self.image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)

    super(Post, self).save(*args, **kwargs)

我收到的错误是“名称 'InMemoryUploadedFile' 未定义”。我该如何解决?也是一个附带问题。该模型还接收视频。我将如何调整视频大小?这只是一个附带问题,InMemoryUploaded 是主要问题。谢谢!

您是否导入了 InMemoryUploadedFile?

请先导入

from django.core.files.uploadedfile import InMemoryUploadedFile

您不需要使用 InMemoryUploadedFile 来保存文件。你也会得到错误,因为你从不导入它。导入它 from django.core.files import InMemoryUploadedFile。你最好使用 ContentFile:

而不是它
from django.core.files.base import ContentFile

...
def save(self, *args, **kwargs):
    img = Image.open(self.media)

    output = BytesIO()

    original_width, original_height = img.size
    aspect_ratio = round(original_width / original_height)
    desired_height = 100
    desired_width = desired_height * aspect_ratio

    img = img.resize((desired_width, desired_height))

    img.save(output, format='JPEG', quality=90)
    output.seek(0)
    
    self.image.save("%s.jpg" % self.image.name.split('.')[0], ContentFile(output), save=False)
    super(Post, self).save(*args, **kwargs)