我想覆盖保存功能。我想要的是将原始照片的大小调整为默认大小(800 * 534),然后为此图片生成缩略图。但是,我发现照片存储了两次。为什么Django将图片保存两次?
例如,我第一次添加一张名为sample.jpg的照片。我的方向有三张照片。一个在../Media/photos/中,其他则在../Media/中。当我再次保存这张照片时,有四张照片。两个在../Media/photos/中,其他则在../Media/中。
我真的很困惑,为什么Django存储图片两次,为什么我的图片存储在../媒体没有../Media/photos。我想要的只是在../Media/photos中制作800 * 534图片及其缩略图中的两张图片。
这是我的代码。
类照片:
class Photo(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250)
summary = models.TextField(blank=True)
created_date = models.DateField(auto_now_add=True)
modified_date = models.DateField(auto_now=True)
image = models.ImageField(upload_to='photo/')
album = models.ForeignKey(Album, on_delete=models.CASCADE)
is_cover_photo = models.BooleanField(default=False)
保存功能我在课堂照片
def save(self):
if not self.pk:
filename = self.image
if filename:
print(filename)
img = Image.open(filename)
# save the default size photo
default_size = (800, 534)
img.thumbnail(default_size, Image.ANTIALIAS)
img.save(self.get_img_filename(filename))
# save thumbnail photo
cover_size = (342, 229)
img.thumbnail(cover_size, Image.ANTIALIAS)
img.save(self.get_img_thumb_filename(filename))
super(Photo, self).save()
写了另外两个功能:
def get_img_filename(self, img):
return img.path
def get_img_thumb_filename(self, img):
img_pre, img_ext = os.path.splitext(img.path)
thumb_name = img_pre + '_thumb' + img_ext
return thumb_name
您可以保存它并使用'super()'调用保存它。 –