Rumah >pembangunan bahagian belakang >Tutorial Python >Bolehkah Model Django Menggunakan Sifat Tersuai untuk Melangkau Saiz Semula Imej pada Perubahan Medan Bukan Imej?

Bolehkah Model Django Menggunakan Sifat Tersuai untuk Melangkau Saiz Semula Imej pada Perubahan Medan Bukan Imej?

Barbara Streisand
Barbara Streisandasal
2024-10-22 20:46:081043semak imbas

Can Django Models Utilize Custom Properties to Skip Image Resizing on Non-Image Field Changes?

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!

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