Vor dem Speichern des Modells habe ich die Größe eines Bildes geändert. Aber wie kann ich überprüfen, ob ein neues Bild hinzugefügt oder nur die Beschreibung aktualisiert wurde, damit ich die Neuskalierung jedes Mal überspringen kann, wenn das Modell gespeichert wird?
class Model(model.Model):
image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def save(self, *args, **kwargs):
if self.image:
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
Ich möchte nur neu skalieren, wenn ein neues Bild geladen oder aktualisiert wurde, aber nicht, wenn die Beschreibung aktualisiert wurde.
Antworten:
Einige Gedanken:
Ich bin mir nicht sicher, ob es mit allen Pseudo-Auto-Django-Tools gut funktionieren würde (Beispiel: ModelForm, Contrib.admin usw.).
quelle
Überprüfen Sie das pk-Feld des Modells. Wenn es None ist, ist es ein neues Objekt.
Bearbeiten: Ich habe in form.changed_data einen Check für 'image' hinzugefügt. Dies setzt voraus, dass Sie die Admin-Site verwenden, um Ihre Bilder zu aktualisieren. Sie müssen auch die unten angegebene Standardmethode save_model überschreiben.
quelle
Sie können ein zusätzliches Argument angeben, um zu bestätigen, dass ein neues Bild veröffentlicht wurde.
Etwas wie:
oder Anforderungsvariable übergeben
Ich denke, diese werden Ihre Rettung nicht brechen, wenn Sie einfach angerufen werden.
Sie können dies in Ihre admin.py einfügen, damit dies auch mit der Admin-Site funktioniert (für die zweite der oben genannten Lösungen):
quelle
Was ich getan habe, um das Ziel zu erreichen, war dies zu erreichen.
und unter der save () -Methode ist dies ..
Wenn ich also einige Felder bearbeite, aber das Bild nicht bearbeite, setze ich dies ein.
Sie können das ersetzen
"skip creating photo thumbnail"
mit"im just editing the description"
oder einem formellere Text.Hoffe das hilft!
quelle
Fragen Sie die Datenbank nach einem vorhandenen Datensatz mit derselben PK ab. Vergleichen Sie die Dateigrößen und Prüfsummen der neuen und vorhandenen Bilder, um festzustellen, ob sie identisch sind.
quelle
Django 3: Überschreiben vordefinierter Modellmethoden
quelle
In der neuen Version ist es so:
quelle
Ich habe einen anderen einfachen Weg gefunden, um die Daten in der Datenbank zu speichern
models.py
In der Datenbank habe ich nur 2 Variablen
views.py
In diesem Fall habe ich die Instanz des Modells nur in views.py erstellt und Daten nur aus Ansichten in 2 Variablen eingefügt / gespeichert.
quelle