私は画像をアップロードする方法についてのチュートリアルを進めていますが、この男が提出された写真のサムネイルを生成するために使用する方法に完全に迷っています
これが彼のコードの切り詰められたチャンクです:
import os.path
from PIL import Image as PImage
from settings import MEDIA_ROOT
from tempfile import *
class Image(models.Model):
image = models.FileField(upload_to="images/")
thumbnail = models.ImageField(upload_to="images/", blank=True, null=True)
def save(self, *args, **kwargs):
super(Image, self).save(*args, **kwargs)
im = PImage.open(pjoin(MEDIA_ROOT, self.image.name))
fn, ext = os.path.splitext(self.image.name)
im.thumbnail((128,128), PImage.ANTIALIAS)
thumb_fn = fn + "-thumb" + ext
tf = NamedTemporaryFile()
im.save(tf.name, "JPEG")
self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)
tf.close()
super(Image, self).save(*args, ** kwargs)
したがって、これに関する私の具体的な質問は次のとおりです。
- 彼が画像にFileFieldを使用し、サムネイルにImageFieldを使用する理由は何ですか?
- 私が理解していることから
super(Image, self).save(*args, **kwargs)
、モデルを保存します。しかし、なぜ彼は最後にそれを再び呼ぶのですか? - それから私は役割が果たしていることと、呼び出され
NamedTemporaryFile()
たときに正確に何が起こるかを本当に理解していませんself.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)