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

DDD
Lepaskan: 2024-10-22 16:26:02
asal
240 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan