2017-11-30 6 views
0

Ich versuche einen Zähler in einem Modell zu aktualisieren, um Datenbankabfragen zu speichern. Also habe ich ein Artikelmodell mit einem Bild_Zählerfeld. Bilder sind m2m mit dem Artikel.Django Aktualisieren eines Werts vor einem Speichern

Wenn ich jedes Bild aus dem Artikel hinzufüge oder entferne (mit Django Admin), möchte ich den Artikel picture_count aktualisieren. Aber es scheint, dass ich falsch liege.

Ich dachte, ich könnte einfach die Speichermethode meines Artikelmodells überschreiben. Aber das funktioniert nicht so wie das

def save(self, *args, **kwargs): 
    self.picCount = self.pictures.count() 
    super(Articles, self).save(*args, **kwargs) # Call the "real" save() method. 

Das Problem ist, dass die m2m noch nicht aktualisiert worden sind. Ich habe versucht, es nachher aufzurufen (und dann erneut zu speichern), aber das Objekt ist veraltet. Soll ich das Objekt aktualisieren und erneut speichern oder gibt es einen besseren Ort, um diese Anzahl zu aktualisieren?

+0

Wo machst du das? In einer benutzerdefinierten Form? Können Sie ein Attribut an das Modell anhängen, das nur eine ganze Zahl zurückgibt, die die Anzahl verwandter Bildersätze angibt? – drsnark

+0

Hinweis, das ist im Allgemeinen keine gute Idee. Es ist viel besser, diese Anzahl zu berechnen, wenn Sie sie benötigen, z. B. über Aggregation. Datenbanken sind wirklich gut in dieser Art von Dingen. –

Antwort

0

Da Sie mit m2m-Beziehungen arbeiten, möchten Sie die save_related-Methode überschreiben.

Admin.py

def save_related(self, request, form, formsets, change): 
    self.picCount = self.pictures.count() 
    super(Articles, self).save_related(request, form, formsets, change) 

Beachten Sie, wenn Sie Sie Python 3.x verwenden müssen, um nichts zu super Anruf übergeben.

+0

Danke, ich habe nicht gemerkt, dass Super so vereinfacht wurde. Gut zu wissen. –

Verwandte Themen