Rumah >pembangunan bahagian belakang >Tutorial Python >Bolehkah Model Django Menggunakan Sifat Tersuai untuk Melangkau Saiz Semula Imej pada Perubahan Medan Bukan Imej?
Melangkau Saiz Semula Imej pada Perubahan Medan Bukan Imej dalam Django
Apabila menyimpan model Django, tindakan tertentu mungkin diperlukan sahaja apabila medan tertentu diubah. Dalam kes di mana medan imej hadir, pengguna mungkin ingin mengubah saiz imej apabila ia dimuat naik atau dikemas kini tetapi melangkau proses apabila hanya medan lain, seperti perihalan, diubah suai.
Masalah:
Dalam model Django yang disediakan, kaedah save() melaksanakan penskalaan semula imej tanpa mengira sama ada imej itu sendiri telah diubah. Pendekatan ini tidak cekap dan boleh mengakibatkan pengiraan yang tidak perlu.
Penyelesaian Menggunakan Harta Tersuai dan Penetap:
Satu penyelesaian ialah memperkenalkan sifat tersuai dengan penetap untuk mengawal imej mengubah saiz. Berikut ialah contoh:
<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 if self._image_changed: # Perform image rescaling logic here, if necessary pass def get_image(self): return self._image image = property(get_image, set_image) def save(self, *args, **kwargs): if getattr(self, '_image_changed', True): super(Model, self).save(*args, **kwargs) # Perform image rescaling logic here (if implemented in `set_image`)</code>
Pendekatan ini menggunakan sifat tersuai bernama imej yang berfungsi sebagai pembalut di sekitar medan imej sebenar bernama _image. Kaedah set_image() digunakan untuk menetapkan nilai baharu pada medan _image dan juga untuk menetapkan bendera _image_changed kepada Benar. Bendera _image_changed digunakan untuk menentukan sama ada penskalaan semula imej diperlukan.
Dalam kaedah save(), program menyemak nilai _image_changed. Jika ia Benar, ia menganggap bahawa medan imej telah diubah dan meneruskan dengan logik penskalaan semula imej. Jika _image_changed adalah Palsu, ini bermakna medan imej tidak diubah dan program melangkau langkah penskalaan semula imej.
Atas ialah kandungan terperinci Bolehkah Model Django Menggunakan Sifat Tersuai untuk Melangkau Saiz Semula Imej pada Perubahan Medan Bukan Imej?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!