In Django - gibt es ein Standard-Zeitstempelfeld für alle Objekte? Das heißt, muss ich explizit ein 'Zeitstempelfeld' für 'Erstellt am' in meinem Modell deklarieren - oder gibt es eine Möglichkeit? bekomme ich das automatisch?
Standardmäßig gibt es so etwas nicht, aber das Hinzufügen ist ganz einfach. Benutze einfach das auto_now_add
Parameter in der DateTimeField
Klasse:
created = models.DateTimeField(auto_now_add=True)
Sie können auch auto_now
für ein Feld "Aktualisiert am". Überprüfen Sie das Verhalten von auto_now
hier .
Zum 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)
Hört sich nicht automatisch nach etwas an Django würde standardmäßig funktionieren. Es würde Sie nicht zwingen, einen Zeitstempel zu fordern.
Ich würde eine abstrakte Basisklasse erstellen und alle Modelle davon erben, wenn Sie den Zeitstempel/den 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
anstatt Django.db.models.Model
class MyFutureModels(TimeStampedModel):
....
Wenn Sie Django-Erweiterungen (eine gute App zum Hinzufügen von Funktionen zum Django-admin.py-Befehlszeilen-Helfer) verwenden, können Sie diese Modellfelder kostenlos erhalten, indem Sie von deren) erben TimeStampedModel oder deren benutzerdefinierte TimeStamp-Felder
Sie können versuchen Django-Erweiterungen
wenn Sie das abstrakte Zeitstempelmodell verwenden möchten
from Django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Es hat andere abstrakte Modelle. Sie können das auch verwenden.
Wenn Sie dieses Feld ändern möchten, stellen Sie Folgendes anstelle von auto_now_add=True:
Ein.
Für Datum
from datetime import date
models.DateField(default=date.today)
Für DateTime
from Django.utils import timezone
models.DateTimeField(default=timezone.now)
Ich denke, ich würde mitgehen
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Ich brauche einige Erläuterungen zur Verwendung
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True