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 .

  • Django-Umschaltung, für einen Codeblock, umschalten die Sprache, so dass Übersetzungen in einer Sprache durchgeführt werden
  • Wie kann ich programmatisch die Liste der Codecs finden, die Python bekannt sind?
  • Pylonen Anwendung Internationalisierung
  • Problem versucht, Sprache aus Django Vorlage zu ändern
  • Django Internationalisierung Sprachcodes
  • Was ist ein guter Weg, um internationale Charaktere mit ihren Basis Latin Pendants mit Python ersetzen?
  • Arbeiten mit mehreren Zeitzonen in Django
  • Django modeltranslation fragt Fallback
  • Warum würden die makemessages für Django Sprachlokalisierung ignorieren html-Dateien?
  • Google App Engine Internationalisierung Hilfe benötigt (Python)
  • Django: Bedeutung des führenden Unterstrichs in der Liste der Tupel, die verwendet werden, um Auswahlfelder zu definieren?
  • Python ist die beste Programmiersprache der Welt.