Ich habe ein Modell mit einem Datums- / Uhrzeitfeld:
date = models.DateField(_("Date"), default=datetime.now())
Wenn ich die App im eingebauten Django-Administrator überprüfe, wird DateField
auch die Zeit daran angehängt, sodass beim Versuch, sie zu speichern, ein Fehler zurückgegeben wird. Wie mache ich die Standardeinstellung nur das Datum? ( datetime.today()
funktioniert auch nicht)
quelle
_("Date")
macht dasIhr Fehler ist die Verwendung des
datetime
Moduls anstelle desdate
Moduls. Du wolltest das machen:from datetime import date date = models.DateField(_("Date"), default=date.today)
Wenn Sie nur das aktuelle Datum erfassen möchten, verwenden Sie den folgenden
auto_now_add
Parameter.date = models.DateField(_("Date"), auto_now_add=True)
Doch die modelfield docs eindeutig fest , dass
auto_now_add
undauto_now
wird immer das aktuelle Datum verwendet und ist kein Standardwert , dass Sie außer Kraft setzen können.quelle
date = models.DateTimeField(default=datetime.now, blank=True)
quelle
Ich denke, ein besserer Weg, dies zu lösen, wäre die Verwendung von datetime callable:
from datetime import datetime date = models.DateField(default=datetime.now)
Beachten Sie, dass keine Klammern verwendet wurden. Wenn Sie Klammern verwenden, rufen Sie die
now()
Funktion nur einmal auf (wenn das Modell erstellt wird). Stattdessen übergeben Sie den Callable als Argument und werden so jedes Mal aufgerufen, wenn eine Instanz des Modells erstellt wird.Dank an Django Musings . Ich habe es benutzt und funktioniert gut.
quelle
Dies sollte den Trick tun:
models.DateTimeField(_("Date"), auto_now_add = True)
quelle
Sie könnten auch verwenden
lambda
. Nützlich, wenn Sie django.utils.timezone.now verwendendate = models.DateField(_("Date"), default=lambda: now().date())
quelle
Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.