Django: modelliert das letzte Mod-Datum und die Mod-Anzahl

7

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?

    
Net Citizen 04.08.2009, 23:51
quelle

4 Antworten

12

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:

%Vor%
  

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%

Modellfeldreferenz

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%     
hughdbrown 04.08.2009, 23:53
quelle
6

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 :

implementiert
  

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:

%Vor%     
Sebastian Wozny 21.11.2015 14:06
quelle
2

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.

T. Stone 05.08.2009 00:10
quelle
0

Sie können auch eine Middleware-Lösung verwenden, die Sie hier finden: Ссылка

settings.py

%Vor%

models.py

%Vor%     
Victor 'Chris' Cabral 07.01.2013 21:47
quelle