Was ist der beste Weg, um ein Erstellungsdatum für ein Objekt automatisch festzulegen, und auch ein Feld, das aufzeichnet, wenn das Objekt zuletzt aktualisiert wurde?Automatisches Erstellungsdatum für Django-Modell-Formularobjekte?
In meinem Modell habe ich:
created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)
und meiner Ansicht nach:
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
return HttpResponseRedirect('obj_list')
ich den Fehler:
objects_object.created_at may not be NULL
Muss ich auf diesen Wert manuell eingestellt mich ? Ich dachte, das war der Punkt der Parameter, die an die DateTimeFields übergeben wurden (oder sind sie nur Standardwerte, und da ich 'editierbar = Falsch' gesetzt habe, werden sie nicht auf dem Formular angezeigt und werden daher nicht in der Anfrage eingereicht und deshalb nicht in die Form gebracht werden?).
Was ist der beste Weg, dies zu tun? Ein init Methode?
Dank
ps - ich bin ein django und Python-Neuling ...
'auto_now' und' auto_now_add' werden als böse betrachtet, also versuchen Sie, sie zu vermeiden. [Diese Antwort] (http://stackoverflow.com/a/1737078/1226722) erklärt warum und bietet eine bessere Methode, die 'save()' Methode zu überschreiben. – gregoltsov
es erzeugt diesen Fehler: 'Sie versuchen, ein nicht nullbares Feld 'created_at' zu Gameuser ohne einen Standard hinzuzufügen; Das können wir nicht tun (die Datenbank benötigt etwas, um vorhandene Zeilen zu füllen). Bitte wählen Sie einen fix: 1) Geben Sie einen einmaligen Standard jetzt (wird Beenden Sie auf alle vorhandenen Zeilen) 2) eingestellt werden, und lassen Sie mich eine Standard in models.py hinzufügen Wählen Sie eine Option: 1 Bitte geben Sie die Standardwert jetzt, als gültig Python Die Module datetime und django.utils.timezone sind verfügbar, so dass Sie z timezone.now() >>> timezone.now() ' –
löschen Sie die Zeilen in den Datenbanken, oder aktivieren Sie Option 1 und fügen Sie timezone.now() hinzu – mullerivan