Heim >Backend-Entwicklung >Python-Tutorial >Wann die Django-Modellspeicherung für die Bildgrößenänderung überschrieben werden sollte
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:
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!