【问题标题】:django signals pre_save when file is uploaded上传文件时,django 发出 pre_save 信号
【发布时间】:2020-12-01 13:57:21
【问题描述】:

如果文件已上传/更改,我可以在 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 管理员也是)。谢谢

【问题讨论】:

    标签: django signals


    【解决方案1】:

    检查一下,您可以简单地覆盖模型保存方法来调整图像大小。

    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)
    

    【讨论】:

    • 不幸的是,这不起作用。没有变化功能。你有文档的链接吗?
    • @mdede 我已经更新了我的答案,我已经在我的机器上运行了这段代码,你只需要在此处添加调整图像大小的逻辑。
    猜你喜欢
    • 2011-12-22
    • 2014-04-15
    • 1970-01-01
    • 2018-08-09
    • 2010-11-02
    • 2014-03-16
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多