2017-02-14 3 views
0

Bei einem Modellauto_now_add Felder meine Eingabe außer Kraft setzen

class Foo(models.Model): 
    bar = models.DateTimeField(auto_now_add=True) 

Als ich

my_foo = Foo.objects.create(bar=yesterday) 

tun Dann my_bar.foo nicht gestern, aber jetzt. Ich habe

my_foo = Foo.objects.create() 
my_foo.bar = yesterday 
my_foo.save() 

dies nicht tun, um den Fall zu sein, aber gilt für Django 1.8.17

Antwort

1

Von den docs:

Die auto_now und auto_now_add Optionen wird immer Verwenden Sie das Datum in der Standardzeitzone zum Zeitpunkt der Erstellung oder Aktualisierung. Wenn Sie etwas anderes benötigen, sollten Sie in Erwägung ziehen, einfach Ihren eigenen aufrufbaren Standardwert zu verwenden oder save() zu überschreiben, anstatt auto_now oder auto_now_add zu verwenden. Oder Sie verwenden ein DateTimeField anstelle eines DateFields und entscheiden, wie die Konvertierung von Datum zu Datum zur Anzeigezeit gehandhabt wird.

So sollten Sie tun, dass anstelle

bar = models.DateTimeField(default=date.today) 
+0

Recht ... Auf der Suche rund um das Internet, so scheint es, dass diese kwargs Funktionalität so viele Male geändert hat, dass die Menschen nicht nur recomment sie zusammen verwenden. Ich werde in Richtung überschreiben die "speichern" statt – Eldamir

+0

@Eldamir - Ich kann nirgendwo in den Dokumenten, die darauf hindeuten, dass es jemals geändert hat, diese Notiz ist sogar in der [docs for 1.7] (https: //docs.djangoproject .com/de/1.7/ref/models/fields/# django.db.models.DateField.auto_now_add) - Der einzige Hinweis darauf ist ein [Bugfix in 1.4] (https://docs.djangoproject.com/ de/dev/releases/1.4/# loading-einige-unvollständige-features-no-longer-works – Sayse

Verwandte Themen