django: SplitDateTimeWidget игнорирует date_format - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь использовать виджет SplitDateTimeWidget, но хочу, чтобы он принимал дату в формате день - месяц - год.

from django.forms.widgets import SplitDateTimeWidget

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')}

SplitDateTimeWidget принимает аргумент date_format, который я ожидаю использовать для проверки ввода даты, но это не так.

Стандартный виджет заменен правильно, но он игнорирует date_format и настаивает на проверке по умолчанию месяц - день - год.

Я также безуспешно пытался установить настройки DATE_FORMAT и DATE_INPUT_FORMATS.

Спасибо за любую помощь.

Ответы [ 3 ]

5 голосов
/ 07 января 2013

Это сработало для меня:

class EventForm(forms.ModelForm):

    start = SplitDateTimeField(input_date_formats=['%d/%m/%Y'],
                               input_time_formats=['%H:%M'], 
                               widget=SplitDateTimeWidget(date_format='%d/%m/%Y',
                                                          time_format='%H:%M'),
                               )

    class Meta:
        model = Event
1 голос
/ 04 июля 2012

У меня возникла та же проблема: я пытался сделать так, чтобы часть даты в SplitDateTimeField принимала даты в формате "% d /% m /% Y".

Решение выше Марата у меня не сработало (включая исправление к нему Оматом)

Я наконец-то решил проблему, переопределив список форматов ввода даты и времени по умолчанию в settings.py:

DATETIME_INPUT_FORMATS = ('%d/%m/%Y %I:%M', '%Y-%m-%d %H:%M', '%Y-%m-%d',
    '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M', '%m/%d/%Y',
    '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M', '%m/%d/%y')

Я добавил желаемый формат в качестве первого в списке, чтобы он имел приоритет над остальными.

Из документации Django: «Форматы будут проверены по порядку, используя первый действительный»

1 голос
/ 06 октября 2011

Формат даты виджета отвечает только за вывод и не имеет значения для проверки.Имеет значение тип поля, и в случае SplitDateTimeField он использует DateField и TimeField, которые создаются с помощью параметра input_date_formats.

Поэтому ответ таков:

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        widgets = {'start': SplitDateTimeWidget(date_format='%d/%m/%Y')}

    start = SplitDateTimeField(input_date_formats='d/m/Y',
                               input_time_formats='<whatever, or skip it>')

Обратите внимание, что input_date_formats - это формат Django, http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date

...