Gibt es in Django ein Standard-Zeitstempelfeld für alle Objekte? Muss ich in meinem Modell explizit ein Feld "Zeitstempel" für "Erstellt am" deklarieren - oder gibt es eine Möglichkeit, dies automatisch zu ermitteln?
88
Gibt es in Django ein Standard-Zeitstempelfeld für alle Objekte? Muss ich in meinem Modell explizit ein Feld "Zeitstempel" für "Erstellt am" deklarieren - oder gibt es eine Möglichkeit, dies automatisch zu ermitteln?
Standardmäßig gibt es so etwas nicht, aber das Hinzufügen eines ist super einfach. Verwenden Sie einfach den auto_now_add
Parameter in der DateTimeField
Klasse:
created = models.DateTimeField(auto_now_add=True)
Sie können es auch auto_now
für ein Feld "Aktualisiert am" verwenden. Überprüfen Sie das Verhalten von auto_now
hier .
Für auto_now_add
hier .
Ein Modell mit beiden Feldern sieht folgendermaßen aus:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Automatisch klingt es nicht so, als würde Django standardmäßig etwas tun. Es würde Sie nicht zwingen, einen Zeitstempel zu benötigen.
Ich würde eine abstrakte Basisklasse erstellen und alle Modelle davon erben, wenn Sie den Zeitstempel / Feldnamen usw. nicht vergessen möchten.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Es scheint nicht viel zu importieren wherever.TimeStampedModel
stattdjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
model_utils
für Django, das bereits enthältTimeStampedModel
, aber wenn Sie nichts anderes von diesem Paket benötigen, behalten Sie es einfach ohne zusätzliches Gewicht.created
und brauchtenupdated
. Dies ist eine großartige Möglichkeit, es sauber zu machen.Wenn Sie django-Erweiterungen verwenden (eine gute App zum Hinzufügen von Funktionen zum Befehlszeilen-Helfer django-admin.py), können Sie diese Modellfelder kostenlos herunterladen, indem Sie von ihrem TimeStampedModel erben oder ihre benutzerdefinierten TimeStamp-Felder verwenden
quelle
Sie können Django-Erweiterungen ausprobieren
Wenn Sie ein abstraktes Zeitstempelmodell verwenden möchten
Es hat andere abstrakte Modelle. das kannst du auch benutzen.
quelle
Wenn Sie dieses Feld ändern möchten, legen Sie statt Folgendes fest
auto_now_add=True:
Für Datum
Für DateTime
quelle
Ich denke, ich würde mitgehen
Ich brauche einige Klarstellungen zur Verwendung
quelle