2017-03-17 8 views
0

Ich habe wenig Problem mit Anfangswert von DateTimeField in Django Formen.django DateTimeField in Form (Initialwert)

Ich habe Erklärung in forms.py

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), required=False) 
    ... 

Ich habe Erklärung in models.py

class Fault(models.Model): 
    ... 
    # date time 
    date_time = models.DateTimeField(default=datetime.now().strftime("%Y-%m-%d %H:%M:%S")) 
    ... 

Problem ist mit geeigneten Zeitpunkt zurückkehrt. Wenn ich ein paar Objekte zu meiner Datenbank mit Initial/Default Datetime aus meinem forms.py hinzufügen, habe ich genau die gleiche Zeit für jedes Objekt.

Aber wenn ich Objekte mit Datetime aus Vorlage hinzufügen, habe ich gute Datetime für jedes Objekt, das in der Datenbank ist.

Ich muss meine Funktion zur Rückgabe von Datetime ist genau das gleiche in beiden Situationen, aber vielleicht ist Problem mit der Generierung der Form? Wir haben die gleiche Zeit, weil wir einmal eine Form erzeugen, oder so ähnlich?

Ich weiß nicht, was ich damit machen soll, weil ich Initialwert von Formularen verwenden möchte und es nicht erneut in Vorlage tun muss.

Ony Ideen ?? Fehler?? Andere Datetime-Funktion Andere Möglichkeit, dieses kleine Problem zu lösen ??

Bitte helfen Sie mir :)

Antwort

0

Sie die Funktion datetime.now().strftime("%Y-%m-%d %H:%M:%S") Aufruf und die default wie zuweisen. Zur Laufzeit wird now() ausgewertet und als Standard gespeichert. Daher sehen Sie für alle Ihre Objekte das gleiche Datum. Sie müssen auto_now argument verwenden und auf True einstellen.

Modell -

class Fault(models.Model): 
    ... 
    date_time = models.DateTimeField(auto_now=True) 
    ... 

Form -

class FaultForm(forms.ModelForm): 
    ... 
    date_time = forms.DateTimeField(initial=datetime.now(), required=False) 
    ... 
+0

in dieser Lösung, die ich solche Fehler haben: django.core.exceptions.FieldError: ‚date_time‘ kann nicht für die Fehlermodellform angegeben werden Da es ein nicht editierbares Feld ist Ich versuche, dieses Feld zu deaktivieren, aber es funktioniert sowieso nicht –

+0

Wenn Sie möchten, dass das Feld bearbeitbar ist, dann entfernen Sie den 'auto_now = True' Teil im Modellformular. –

+0

Also Ihre Antwort ist nutzlos. Sie sagen mir, dass ich Auto_now Argument verwenden muss, um mein Problem zu lösen, aber wenn dieses Argument mir ein anderes Problem gibt, sagen Sie mir, dass ich auto_now entfernen muss? Wie kann es mir helfen ?? –

0

Django Modellfelder bei der Kompilierung erhalten ausgewertet. In Ihrem obigen Beispiel wird der default Wert einmal ausgewertet.

diesem einfachen Punkt zu beheben, um das default Argument einer aufrufbar:

def get_now(): 
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S") 

class Fault(models.Model): 
    date_time = models.DateTimeField(default=get_now) 
+0

Obwohl dies funktionieren könnte, sollte man das eingebaute 'auto_now' bevorzugen. –

+0

Vielleicht, aber es hängt von der Situation ab und in dieser Frage gibt es nicht genügend Informationen, um das zuverlässig zu empfehlen. – brianz

+0

Genau, da es nicht genug Informationen gibt, sollte man immer das eingebaute bevorzugen. –

Verwandte Themen