würde Ich mag Timing verspotten, so dass in der Lage sein zu gesetzt bestimmten Zeit auf ein Feld vom Typ DateTimeField
mit auto_now_add=True
während meiner Tests zB:Mock Timing in einem Kontextmodell mit einem Feld Datetimefield mit auto_now_add erstellen = True
class MyModel:
...
created_at = models.DateTimeField(auto_now_add=True)
...
class TestMyModel(TestCase):
...
def test_something(self):
# mock current time so that `created_at` be something like 1800-02-09T020000
my_obj = MyModel.objects.create(<whatever>)
# and here my_obj.created_at == 1800-02-09T000000
ich bin mir bewusst, das aktuelle Datum always für diese Art von Feldern verwendet wird, deshalb suche ich eine Alternative irgendwie das System-Timing zu verspotten, aber nur in einem Kontext.
Ich habe einige Ansätze ausprobiert, zum Beispiel, einen Zusammenhang mit freeze_time
zu schaffen, sondern hat nicht funktioniert:
with freeze_now("1800-02-09"):
MyModel.objects.create(<whatever>)
# here the created_at doesn't fit 1800-02-09
Ofc denke ich, ist dies aufgrund der Maschinerie hinter, wie es das Objekt erstellt wird mit auto_now_add=True
.
Ich möchte nicht auto_now_add=True
entfernen und Standardwerte verwenden.
Gibt es eine Möglichkeit, wir können das Timing verspotten, so dass wir tun können, dass diese Art von Feld bekommen die Zeit, die ich in bestimmten Kontext will?
Ich Django 1.9.6
und Python 3.4
Django- und Python-Versionen? – theWanderer4865
Sie könnten wahrscheinlich die pre_save-Methode auf dem Datetime-Feld verspotten - ein bisschen eklig, aber hey, Zeit richtig? – theWanderer4865
Ich benutze Django 1.9.6 und Python 3.4 – trinchet