我想覆蓋保存功能。我想要的是將原始照片的大小調整爲默認大小(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()'調用保存它。 –