Создание запросов Django с локализованными датами - PullRequest
3 голосов
/ 22 февраля 2011

В моей форме у меня есть DateField с именем booking_date, который отображается с AdminDateWidget. Содержимое поля booking_date должно быть интернационализировано. Проблема возникает, когда я хочу использовать значение поля примерно так:

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

Но если мой формат даты '% d.% M.% Y' :

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

Я получаю 'ValidationError: введите действительную дату в формате ГГГГ-ММ-ДД'

Как сделать запрос независимо от используемого формата даты?

Ответы [ 3 ]

4 голосов
/ 22 февраля 2011

Вы должны сначала проанализировать его с локализованной версией формата strftime.

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

Используйте эти форматы в strptime:

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

Вы не должны полагаться на передачу непосредственно от пользователя в запрос.

Похоже, вы должны сделать следующее из вашего конкретного примера:

d = datetime.strptime('%d.%m.%Y')
booking = Booking.objects.get(booking_nmber='BN34D', booking_date=d)
1 голос
/ 04 марта 2011

Я решил проблему с помощью этого:

from django.utils import formats

formats.get_format('DATE_INPUT_FORMATS')[0]

Этот формат затем используется для анализа даты, как xyld показал .

1 голос
/ 03 марта 2011

Насколько я понимаю ваш вопрос, вы заранее не знаете, какой язык будет использоваться.Это может привести к неразрешимым проблемам.(«10-11-12» может быть 11 октября 2012 г. или 12 ноября 2010 г. или ...)

Поэтому у вас должен быть ограниченный различимый набор возможных форматов.Тогда вы можете сделать:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...