Все пользовательские элементы виджета можно обойти.
Вот выдержка из django/forms/widgets.py
:
class DateInput(TextInput):
def __init__(self, attrs=None, format=None):
super(DateInput, self).__init__(attrs)
if format:
self.format = format
self.manual_format = True
else:
self.format = formats.get_format('DATE_INPUT_FORMATS')[0]
self.manual_format = False
Вы заметите, что формат виджета устанавливается с помощью модуля форматирования. Модуль формата выбирается в зависимости от локали. Если вы просматриваете из США, Django по умолчанию выберет django.conf.formats.locale.en.formats.py
. Здесь вы найдете формат по умолчанию:
DATE_INPUT_FORMATS = (
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
# '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
# '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
# '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
# '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
)
Как видно из первого блока кода, Django выбирает первый из них. Тщательный подход к изменению формата заключается в создании собственного модуля формата, который переопределяет стандартное значение Django для рассматриваемой локали. Для этого загляните в FORMAT_MODULE_PATH . Если все, что вы пытаетесь сделать, это переопределить формат даты по умолчанию, я скажу, сэкономьте немного времени и патч обезьяны. Я добавил это в свой файл настроек, и все, кажется, прекрасно работает с моим предпочтительным форматом по умолчанию:
DATE_INPUT_FORMATS = ('%m/%d/%Y', '%m/%d/%y', '%Y-%m-%d',
'%b %d %Y', '%b %d, %Y', '%d %b %Y',
'%d %b, %Y', '%B %d %Y', '%B %d, %Y',
'%d %B %Y', '%d %B, %Y')
from django.conf.locale.en import formats
formats.DATE_INPUT_FORMATS = DATE_INPUT_FORMATS