webentwicklung-frage-antwort-db.com.de

Haben Modelle in Django ein Standard-Zeitstempelfeld?

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?

77
9-bits

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_nowhier .

Zum auto_now_addhier .

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)
133
MoshiBin

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):
    ....
28

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

13
Timmy O'Mahony

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.

4
Gaurav

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)
1
chaggy

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
0