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

django signals pre_save when file is uploaded

如果文件已上传/更改,我可以在 pre_savepost_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)