Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengatasi Kaedah Simpan Model Django untuk Saiz Semula Imej Terpilih?

Bagaimana untuk Mengatasi Kaedah Simpan Model Django untuk Saiz Semula Imej Terpilih?

DDD
DDDasal
2024-10-22 16:26:02174semak imbas

How to Override Django Model's Save Method for Selective Image Resizing?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn