I don't have any date input formats defined, my form field is:
expiry_date = forms.DateTimeField(widget=SelectDateWidget,
required=False)
I'm using the locales en
(English) and zh-hans
(Simplified Chinese).
According to PyCharm debugger, the POST values are identical in either language:
self.request.POST['expiry_date_day'] = u'25'
self.request.POST['expiry_date_month'] = u'9'
self.request.POST['expiry_date_year'] = u'2015'
However I get the error only in zh-hans
.
In the form.clean()
method the self.cleaned_data['expiry_date']
value is missing, so I'm guessing it's being stripped out due to failing a previous validation error.
Fixed:
I fixed this by adding the following to my settings:
DATE_INPUT_FORMATS = ('%Y-%m-%d', '%Y/%m/%d')
And then apply this to the specific DateTimeField:
expiry_date = forms.DateTimeField(widget=SelectDateWidget,
input_formats=settings.DATE_INPUT_FORMATS,
required=False)
Specifically '%Y-%m-%d'
is needed to keep en
happy, whilst '%Y/%m/%d'
allows zh-hans
and zh-hant
to function correctly.
I found this by drilling down in the debugger and figuring out what value was passing though DateTimeField.to_python()
.
I'll leave the question open though, as I'd still like to understand exact why they are formatted differently by locale, and if there's a more obvious way to figure out which formats to allow and when and I don't think the solution should be "step-through the debugger until you find the line of code!"