如何在保存之前获取 Django ImageField 的内容?

Jas*_*nTS 5 python django file-upload django-models

我正在尝试在保存模型实例的同时调整图像大小。

class Picture(models.Model):
  image_file = models.ImageField(upload_to="pictures")
  thumb_file = models.ImageField(upload_to="pictures", editable=False)
  def save(self, force_insert=False, force_update=False):
    image_object = Image.open(self.image_file.path)
    #[...] nothing yet
    super(Picture, self).save(force_insert, force_update)
Run Code Online (Sandbox Code Playgroud)

问题是 self.image_file.path 在保存模型之前不存在。它返回一个正确的路径,但图像还不存在。由于没有图像,我无法在 PIL 中打开它以调整大小。

我想将缩略图存储在thumb_file(另一个ImageField)中,所以我需要在保存模型之前进行处理。

有没有打开文件的好方法(也许在内存中获取 tmp 图像对象)还是我必须先保存整个模型,调整大小然后再次保存?

Jan*_*hko 0

也许您可以直接打开文件并将生成的文件句柄传递给Image.open

image_object = Image.open(self.image_file.open())
Run Code Online (Sandbox Code Playgroud)

抱歉,我现在无法测试。

  • 不,它也不起作用..>“NoneType”对象没有属性“read” (4认同)