Ich habe ein Django-Modell namens Blog
.
Ich möchte meinem aktuellen Modell, das für last_modified_date steht, ein Feld hinzufügen. Ich weiß, wie man einen Standardwert einstellt, aber ich möchte irgendwie irgendwie automatisch aktualisiert werden, wenn ich den Blogeintrag über die Verwaltungsschnittstelle ändere.
Gibt es eine Möglichkeit, diesen Wert auf die aktuelle Zeit bei jedem Speichern der Verwaltungssite zu setzen?
Gibt es auch eine Möglichkeit, ein mod_count
-Feld hinzuzufügen und automatisch bei jeder Änderung des Blogeintrags der Admin-Site zu berechnen?
Erstellen Sie ein DateTimeField
in Ihrem Modell. Lassen Sie es aktualisieren, wenn es gespeichert wird. Dazu müssen Sie die Option auto_now_add
verwenden:
DateTimeField.auto_now_add¶
Setzen Sie das Feld automatisch auf jedes Mal, wenn das Objekt gespeichert wird. Sinnvoll für "zuletzt geänderte" Zeitstempel. Hinweis dass das aktuelle Datum immer verwendet wird; es ist nicht nur ein Standardwert, den Sie kann überschreiben.
Es sollte ungefähr so aussehen:
%Vor%Für den zweiten Teil denke ich, dass Sie
überlasten müssen %Vor%Wie James Bennett hier beschreibt. Es sieht ungefähr so aus:
%Vor%Die angenommene Antwort ist nicht mehr korrekt.
Für neuere Django-Versionen müssen Sie den Parameter auto_now=True
anstelle von auto_now_add=True
verwenden, wodurch der Feldwert nur beim ersten Erstellen des Objekts festgelegt wird.
Aus der Dokumentation :
DateField.auto_now_add¶
Setzen Sie das Feld automatisch auf jetzt, wenn der Objekt wird zuerst erstellt. Nützlich für die Erstellung von Zeitstempeln.
Die gewünschte Funktionalität wird jetzt von auto_now
:
DateField.auto_now¶
Setzen Sie das Feld automatisch auf jetzt jedes Mal, wenn Objekt wird gespeichert.
Um selbstaktualisierende Zeitstempel zu erhalten, sollte ein Modell wie folgt erstellt werden:
%Vor% Um mod_count
jedes Mal zu erhöhen, wenn dieses Modell geändert wird, überladen Sie die Methode save()
des Modells:
Es gibt eine Reihe von Möglichkeiten, wie Sie die Bearbeitungsanzahl bei jedem Speichern erhöhen können.
Das Modell selbst hat eine save () -Methode, und das Admin-Modell hat eine model_save () -Methode.
Nehmen wir zum Beispiel an, Sie wollten, dass es erhöht wird, wenn es mit dem Admin-Tool bearbeitet wurde ....
%Vor%Sie könnten ähnlichen Code auch vom Ereignis save () des Modells abschneiden.
Was Sie noch interessieren könnte, ist django-command-extensions . Es fügt 2 Felder hinzu, die für Sie hilfreich sein können:
CreationDateTimeField - DateTimeField, das automatisch sein Datum festlegt, wenn das Objekt zum ersten Mal in der Datenbank gespeichert wird.
ModificationDateTimeField - DateTimeField, das automatisch sein Datum festlegt, wenn ein Objekt in der Datenbank gespeichert wird.
Sie können auch eine Middleware-Lösung verwenden, die Sie hier finden: Ссылка
Tags und Links django django-admin django-models