Django-Abfragen mit lokalisierten Terminen machen

In meiner Form habe ich ein DateField namens booking_date, das mit dem AdminDateWidget gerendert wird. Der Inhalt des Feldes booking_date muss internationalisiert werden. Das Problem erscheint, wenn ich den Wert des Feldes in so etwas wie folgt verwenden möchte:

booking = Booking.objects.get(booking_number='BN34D', booking_date='2010-11-21') 

Aber wenn mein Datumsformat '% d.% M.% Y' ist :

 booking = Booking.objects.get(booking_number='BN34D', booking_date='21.11.2010') 

Bekomme ich ein 'ValidationError: Geben Sie ein gültiges Datum im JJJJ-MM-DD-Format ein'

Wie kann ich die Abfrage unabhängig vom verwendeten Datumsformat machen?

4 Solutions collect form web for “Django-Abfragen mit lokalisierten Terminen machen”

Sie sollten es zuerst mit einer lokalisierten Version des Strftime-Formats analysieren.

 from datetime import datetime d = datetime.strptime('...') booking.objects.get(..., booking_date=d.date()) 

Verwenden Sie diese Formate in strptime :

http://linux.die.net/man/3/strftime

Sie sollten sich nicht darauf verlassen, direkt vom Benutzer in die Abfrage zu gelangen.

Sieht aus wie Sie das folgende von Ihrem spezifischen Beispiel tun sollten:

 d = datetime.strptime('%d.%m.%Y') booking = Booking.objects.get(booking_nmber='BN34D', booking_date=d) 

Wie in anderen Antworten gesagt, müssen Sie strptime verwenden (…)

Wenn Sie das Strptime-Format für ein Gebietsschema erhalten möchten, möchten Sie vielleicht das Gebietsschema-Modul auschecken.

 >>> import locale >>> print locale.nl_langinfo(locale.D_FMT) %m/%d/%y >>> locale.setlocale(locale.LC_ALL, 'fr_CA.UTF-8') 'fr_CA.UTF-8' >>> print locale.nl_langinfo(locale.D_FMT) %Y-%m-%d 

Wie ich deine Frage verstehe, weißt du nicht sicher im Voraus, welches Gebietsschema benutzt wird. Das kann dich in unlösbare Probleme bringen ("10-11-12" könnte 11. Oktober 2012 oder 12.11.2010 oder … sein)

Sie müssen also einen begrenzten, unterscheidbaren Satz von möglichen Formaten haben. Dann können Sie:

 POSSIBLE_FORMATS = ('%d.%m.%Y', '%Y-%m-%d', '...') for f in POSSIBLE_FORMATS: try: d = datetime.date.strptime(date_str, f) break except ValueError: continue raise ValueError booking = Booking.objects.get(booking_number='BN34D', booking_date=d) 

Ich habe das Problem damit gelöst:

 from django.utils import formats formats.get_format('DATE_INPUT_FORMATS')[0] 

Dieses Format wird dann für das Parsen des Datums verwendet, wie xyld zeigte .

  • Python-Parsing-Datum und finden Sie die richtige locale_setting
  • GAE webapp Anwendung Internationalisierung mit Babel
  • Internationalisierung Django (auf OSX)
  • Ugettext und ugettext_lazy Funktionen nicht erkannt von makemessages in Python Django
  • Wie bekomme ich Unicode-Zeichen in django url?
  • So erstellen Sie eine internationalisierte Google App Engine-Anwendung
  • Python: Split Unicode-String auf Wortgrenzen
  • Wie bekomme ich die aktuelle Sprache in django?
  • Warum würden die makemessages für Django Sprachlokalisierung ignorieren html-Dateien?
  • Hinweise zur Verwendung von FORMAT_MODULE_PATH
  • Japanisch in Pythonfunktion
  • Python ist die beste Programmiersprache der Welt.