Mengatasi Kaedah Simpan Model Django untuk Saiz Semula Terpilih
Soalan:
Bagaimana model Django boleh kaedah simpan ditindih untuk mengubah saiz imej hanya apabila ia ditambah atau dikemas kini, tetapi bukan apabila medan lain diedit?
Masalah:
Kod yang disediakan mengubah saiz imej setiap kali model disimpan, walaupun hanya penerangan dikemas kini. Ini adalah tidak cekap dan tidak perlu.
Penyelesaian:
Penyelesaian yang dicadangkan melibatkan penciptaan sifat yang berfungsi sebagai penetap dan pengambil untuk medan imej. Ini membenarkan penjejakan perubahan pada medan imej dan hanya mengubah saiz apabila ia diubah suai:
<code class="python">class Model(model.Model): _image = models.ImageField(upload_to='folder') thumb = models.ImageField(upload_to='folder') description = models.CharField() def set_image(self, val): self._image = val self._image_changed = True # Or put whole logic in here small = rescale_image(self.image, width=100, height=100) self.image_small = SimpleUploadedFile(name, small_pic) def get_image(self): return self._image image = property(get_image, set_image) def save(self, *args, **kwargs): if getattr(self, '_image_changed', True): small = rescale_image(self.image, width=100, height=100) self.image_small = SimpleUploadedFile(name, small_pic) super(Model, self).save(*args, **kwargs)</code>
Dengan menggunakan pendekatan ini, saiz semula hanya berlaku apabila imej ditambah atau dikemas kini, dengan berkesan menangani kebimbangan yang dibangkitkan dalam soalan asal .
Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Kaedah Simpan Model Django untuk Saiz Semula Imej Terpilih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!