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)