Heim  >  Artikel  >  Backend-Entwicklung  >  Wann die Django-Modellspeicherung für die Bildgrößenänderung überschrieben werden sollte

Wann die Django-Modellspeicherung für die Bildgrößenänderung überschrieben werden sollte

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-22 21:09:03410Durchsuche

When to Override Django Model Saving for Image Resizing

Django-Modellspeicherung für bestimmte Fälle überschreiben

In Django ist die save()-Methode in Modellen dafür verantwortlich, Daten in der Datenbank beizubehalten. Es gibt jedoch Szenarien, in denen Sie dieses Verhalten möglicherweise basierend auf bestimmten Kriterien ändern möchten. Ein solcher Fall besteht darin, ein Bild nur dann neu zu skalieren, wenn es neu hinzugefügt oder aktualisiert wird.

Problem:

In einem Modell mit Feldern für Bild, Miniaturansicht und Beschreibung, Sie Sie müssen die Größe eines Miniaturbilds (Thumb) nur ändern und speichern, wenn das Hauptbild (Bild) erstellt oder geändert wird. Das Aktualisieren des Beschreibungsfelds sollte keine Größenänderung des Bildes auslösen.

Lösung:

Um dies zu erreichen, können Sie die Standardmethode save() überschreiben, indem Sie eine benutzerdefinierte Eigenschaft verwenden, die prüft für Änderungen im Bildfeld:

<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>

So funktioniert es:

  • Die Methode set_image() aktualisiert das Feld _image und setzt ein Flag _image_changed auf Stimmt.
  • Die Methode get_image() gibt den aktuellen Wert des Felds _image zurück.
  • Die Eigenschaft image umschließt sowohl die Methoden set_image() als auch get_image(), um eine konsistente Schnittstelle bereitzustellen.
  • In der überschriebenen save()-Methode wird das Flag _image_changed überprüft. Wenn es „True“ ist, bedeutet das, dass das Bild geändert oder hinzugefügt wurde.
  • In diesem Fall wird die Miniaturansicht neu skaliert.
  • Die super()-Methode wird aufgerufen, um das Modell mit in der Datenbank zu speichern die neu skalierte Miniaturansicht (falls erforderlich) und die aktualisierte Beschreibung.

Das obige ist der detaillierte Inhalt vonWann die Django-Modellspeicherung für die Bildgrößenänderung überschrieben werden sollte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn