django: SplitDateTimeWidget игнорирует date_format

Я пытаюсь использовать 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.

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


person onurmatik    schedule 06.10.2011    source источник


Ответы (3)


Формат даты виджета отвечает только за вывод и не имеет значения для проверки. Важен тип поля, и в случае 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

person Marat    schedule 06.10.2011
comment
спасибо, сработало. одно исправление: input_date_formats должно быть ['%d/%m/%Y'] - person onurmatik; 06.10.2011
comment
date_format игнорируется при отображении значения в поле во время редактирования. хотя SplitDateTimeWidget(date_format='%d/%m/%Y') значение отображается в поле как YYYY-MM-DD. параметр DATE_FORMAT также игнорируется. :( - person onurmatik; 07.10.2011

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

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
person Kerridge0    schedule 07.01.2013

У меня была такая же проблема, когда я пытался заставить часть даты 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: «Форматы будут проверяться по порядку, используя первый действительный»

person amir_    schedule 04.07.2012