我试图在上传图片之前调整图片大小,然后将网址发送回json值。
这就是我的模型的样子:
class Picture(models.Model):
picid = models.AutoField(null=False, unique=True, primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
large = ImageField(upload_to=Helper.createPhotoName)
med = ImageField(upload_to=Helper.createPhotoName)
small = ImageField(upload_to=Helper.createPhotoName)
def save(Self, *args, **kwargs):
super(Picture, self).save(*args, **kwargs)
self.med = get_thumbnail(self.large, '150x150', crop='center', quality=99)
self.small = get_thumbnail(self.large, '80x80', crop='center', quality=99)
用户上传图片后,会将其保存到模型中,获取网址并将其发送回客户端。
self.f = request.Files['file']
usr = User.objects.get(pk=self.uid)
pic = usr.picture_set.create(large=self.f, med=self.f, small=self.f)
self.data['med'] = pic.med.url
self.data['small'] = pic.small.url
之后,在另一个视图中,每当重新加载或重新访问页面以显示较旧的图像和更改它的选项时,始终会在数据库中查找已保存的图像。
pic = Picture.objects.get(user=uid)
self.data['photo'] = {
'small': pic.small.url,
'med': pic.med.url,
'silh': False
}
虽然我第一次获得正确的网址,但第二次我得到了错误的网址。我在upload_to
路径中为每次上传获取了3张图片,在MEDIA_ROOT
的缓存目录中获得了3张已调整大小的图片。在图片表upload_to
中保存的路径不是缓存路径,而已调整大小的图像位于缓存目录中。
在thumbnail_kvstore表中,我可以看到调整大小的图像的路径为name
dict键。刚上传后我得到了一个缓存的网址,但是在刷新后我得到了upload_to路径的网址,我无法获得调整大小的图片。可能是什么问题呢?
答案 0 :(得分:1)
您应该在设置缩略图字段后调用save()
:
def save(Self, *args, **kwargs):
self.med = get_thumbnail(self.large, '150x150', crop='center',
quality=99).name
self.small = get_thumbnail(self.large, '80x80', crop='center',
quality=99).name
super(Picture, self).save(*args, **kwargs)