django在文件上传时发出pre_save信号

如果文件已上传/更改,我可以在pre_save或 中进行测试post_save吗?

例子:

class Item(models.Model):
  name_123 = models.CharField(max_length=255)
  photo = models.ImageField()


@receiver(pre_save, sender=Item)
def my_callback(sender, instance, *args, **kwargs):
  if NEW photo was uploaded:
    resize it;

我不想调整图像大小,如果只有 name_123 更改,但我想在创建新项目和图像更改时调整它的大小(即使上传了具有相同文件名的相同图像。

如果我使用前端 CreateView 或类似的东西,我可以检查 form_data 是否包含文件数据,但我想在一般情况下使用它(django admin 也是)。谢谢

回答

看看这个,你可以简单地覆盖模型保存方法来调整图像大小。

class Item(models.Model):
    name_123 = models.CharField(max_length=255)
    photo = models.ImageField()

def save(self, *args, **kwargs):
    from django.core.files.uploadedfile import UploadedFile
    if hasattr(self.photo, 'file') and isinstance(self.photo.file, UploadedFile):
        pass
        # Resize your photo here.
        # resized_image = get_image_resized()
        # self.photo = resized_image
    super(Item, self).save(*args, **kwargs)


以上是django在文件上传时发出pre_save信号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>