我正在寻找一种在保存ImageField时调整,压缩和优化上传图像的方法。Django如何在使用ImageField保存模型时检查用户是否上传了图像文件?
class Image(models.Model):
name = models.CharField(max_length=254, blank=True)
caption = models.TextField(max_length=1000, blank=True)
height = models.IntegerField()
width = models.IntegerField()
image = models.ImageField(upload_to='', height_field='height', width_field='width', storage=S3MediaStorage())
我首先想到的是覆盖模型的save()
和实现这个逻辑,但我不想,如果用户不更新图像文件的大小调整/压缩/优化再次运行(即,如果他只更新现有对象上的name
或caption
并将其保存)。
什么是正确的方法来检查时,一个新的图像文件被上传到的ImageField,但不是当用户只在模型中,如改变另一个领域。用户更新
caption
,但保持原样?如何在代码中访问上传的图像文件?即包含可传递给Pillow的实际图像文件的变量是什么?
编辑:这是从the suspected duplicate独特。我并不是问该领域是否发生了变化,因为这总是会导致误报。我询问用户是否上传了一个图像文件,我将立即更改(调整大小/优化/压缩),因此如果用户立即下载他上传的图像,他会发现它具有与随机生成的文件名不同的二进制文件,以及因此比较文件名或二进制文件不是有效的方法来确定用户是否正在上传不同的图像。
可能重复[Django:保存时,如何检查字段是否已更改?](http://stackoverflow.com/questions/1355150/django-when-saving-how-can-you-check- if-a-field-has-changed) – rnevius
@rnevius我已经添加了信息来区分这个问题,谢谢 – dtgq