Django Forms DateField

Django, Flask, Bottle, WSGI, CGI…
Antworten
ready
User
Beiträge: 33
Registriert: Sonntag 15. Juni 2008, 12:21
Kontaktdaten:

Hallo allerseits,

ich bin grade dabei mir Django ein Registrierungs-Formular zu bauen, das auch einige Daten zu einer Firma abfragt. Dabei geht es auch um die Erfassung des Firmengründungs-Datums. Hier ist die Anforderung: Das Datum muss im Format zB 16.03.2012 eingegeben werden. Ein Format wie das Amerikaische ist nicht akzeptabel da die Website auf deutsche Kunden abzielt. In der Formular-Klasse habe ich das DateField wie folgt definiert:

Code: Alles auswählen

registered = forms.DateField(label=_('Firma angemeldet seit'), input_formats='%d.%m.%Y', initial=datetime.date.today().strftime('%d.%m.%Y'))
Was schön ist: Der voreingestellte Wert im Datum ist das aktuelle Datum im richtigen Format.
Was nicht schön ist: Wenn ich das Formular abschicke, klappt es mit der Validierung nicht, es kommt die Fehlermeldung: "Bitte ein gültiges Datum eingeben."
Warum ist das Datums-Format ungültig? Der Parameter input_formats ist doch korrekt definiert. Wie kann ich das Problem beheben?

Vielen Dank,
ready
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

input_formats sollte wohl ne Liste sein (zumindest heißt es nicht input_format) und dein initial ist kaputt, das wird nicht das aktuelle today anzeigen, sondern den Tag an dem dein Python Code gestartet ist ;)
ready
User
Beiträge: 33
Registriert: Sonntag 15. Juni 2008, 12:21
Kontaktdaten:

Super danke apollo13 :* Danke für den Tipp.
Du Hast Recht und in der Doku stehts ja auch, aber man kann es sehr leicht übersehen und [] werden dort auch nicht verwendet!


input_formats
A list of formats used to attempt to convert a string to a valid datetime.date object.


Zum Thema Initial: Also bei mir funktioniert es, aber der Entwicklungsserver lief auch noch keine 2 Tage und wurde immer am aktuellen Tag auch gestartet.
Frage: Wie müsste der Code denn korrekterweise aussehen? Danke :)

MfG ready
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

ready hat geschrieben: Zum Thema Initial: Also bei mir funktioniert es, aber der Entwicklungsserver lief auch noch keine 2 Tage und wurde immer am aktuellen Tag auch gestartet.
Frage: Wie müsste der Code denn korrekterweise aussehen? Danke :)
Entweder "initial" im "__init__" der Formklasse setzen oder (bevorzugt) beim Initialisieren vom Form:
f = BlaForm(initial={'feld_name':datetime.today()}) -- btw du musst das wahrscheinlich gar nicht in nen string umwandeln, der konvertiert das Datum im Normalfall schon richtig…
ready
User
Beiträge: 33
Registriert: Sonntag 15. Juni 2008, 12:21
Kontaktdaten:

Hi nochmal,
Also theoretisch würde es doch auch gehen wenn ich Folgendes mache:
Einen neuen def in der models.py:

Code: Alles auswählen

def initial_date():
  return datetime.date.today().strftime('%d.%m.%Y')
Und in der Klasse:

Code: Alles auswählen

registered = forms.DateField(label=_('Firma angemeldet seit'), input_formats=['%d.%m.%Y'], initial=initial_date)
Alles klar? Gehts so?

MfG ready
ready
User
Beiträge: 33
Registriert: Sonntag 15. Juni 2008, 12:21
Kontaktdaten:

Hab noch was dazu gefunden:
http://andrewwilkinson.wordpress.com/20 ... ngo-forms/

mit einer lambda Funktion geht es also auch ;)

MfG ready
Antworten