保存機能を上書きしようとしています。私が望むのは、元の写真をデフォルトのサイズ(800 * 534)にリサイズし、この画像のサムネイルを生成することです。しかし、写真は2度保存されていました。Djangoはなぜ画像を2回保存しますか?
たとえば、初めてsample.jpgという名前の写真を追加します。私の指示には3枚の写真があります。 1つは../Media/photos/にあり、他は../Media/にあります。この写真をもう一度保存すると、4枚の写真があります。 2つは../Media/photos/にあり、他は../Media/にあります。
Djangoが画像を2回保存している理由と、なぜ画像が../Media/photosに保存されていないのかが混乱しています。私が望むのは、800 * 534の画像とそのサムネイル画像を../Media/photosに入れた2枚の画像だけを作ることです。
これは私のコードです。
クラス写真:私は写真
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()
クラスで書いた
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 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()'コールも保存されます。 –