Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bila Perlu Mengatasi Penyimpanan Model Django untuk Saiz Semula Imej

Bila Perlu Mengatasi Penyimpanan Model Django untuk Saiz Semula Imej

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-22 21:09:03412semak imbas

When to Override Django Model Saving for Image Resizing

Mengatasi Penyimpanan Model Django untuk Kes Tertentu

Dalam Django, kaedah save() dalam model bertanggungjawab untuk mengekalkan data ke pangkalan data. Walau bagaimanapun, terdapat senario di mana anda mungkin ingin mengubah suai tingkah laku ini berdasarkan kriteria tertentu. Satu kes sedemikian ialah menskala semula imej hanya apabila ia baru ditambah atau dikemas kini.

Masalah:

Dalam model dengan medan untuk imej, ibu jari dan penerangan, anda perlu mengubah saiz dan menyimpan thumbnail (ibu jari) hanya jika imej utama (imej) dibuat atau diubah suai. Mengemas kini medan perihalan tidak seharusnya mencetuskan saiz semula imej.

Penyelesaian:

Untuk mencapai ini, anda boleh mengatasi kaedah simpan() lalai dengan menggunakan sifat tersuai yang menyemak untuk perubahan dalam medan imej:

<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

    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.thumb = SimpleUploadedFile(name, small_pic)
        super(Model, self).save(*args, **kwargs)</code>

Cara ia Berfungsi:

  • Kaedah set_image() mengemas kini medan _image dan menetapkan bendera _image_changed kepada Benar.
  • Kaedah get_image() mengembalikan nilai semasa medan _image.
  • Sifat imej membungkus kedua-dua kaedah set_image() dan get_image() untuk menyediakan antara muka yang konsisten.
  • Dalam kaedah save() overridden, bendera _image_changed ditandakan. Jika Betul, ini bermakna imej telah ditukar atau ditambahkan.
  • Dalam kes itu, lakaran kecil akan diskalakan semula.
  • Kaedah super() dipanggil untuk menyimpan model ke pangkalan data dengan lakaran kecil yang diskalakan semula (jika perlu) dan perihalan dikemas kini.

Atas ialah kandungan terperinci Bila Perlu Mengatasi Penyimpanan Model Django untuk Saiz Semula 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