【发布时间】:2023-03-31 04:10:01
【问题描述】:
我正在尝试覆盖保存功能。我想要的是将原始照片的大小调整为默认大小(800 * 534),然后为这张照片生成缩略图。但是,我发现照片被存储了两次。
例如,我第一次添加了一张名为 sample.jpg 的照片。我的方向有三张照片。一个在 ../Media/photos/ 中,其他在 ../Media/ 中。当我再次保存这张照片时,有四张照片。两个在 ../Media/photos/ 中,其他在 ../Media/ 中。
我真的很困惑为什么 Django 将图片存储两次以及为什么我的图片存储在 ../Media 而不是 ../Media/photos 中。我想要的是只制作两张图片,分别是 800*534 的图片及其在 ../Media/photos 中的缩略图。
这是我的代码。
班级合影:
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)
我在Photo课上写的保存函数
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()调用也会保存它。
标签: python django python-3.x python-imaging-library