我没有定义任何日期输入格式,我的表单字段是:
expiry_date = forms.DateTimeField(widget=SelectDateWidget,
required=False)
我使用的是区域设置en
(英文)和zh-hans
(简体中文)。
根据PyCharm调试器,两种语言的POST值都相同:
self.request.POST['expiry_date_day'] = u'25'
self.request.POST['expiry_date_month'] = u'9'
self.request.POST['expiry_date_year'] = u'2015'
但是我只在zh-hans
中收到错误。
在form.clean()
方法中,self.cleaned_data['expiry_date']
值缺失,因此我猜测它因先前的验证错误而被删除。
固定:
我通过在设置中添加以下内容来解决此问题:
DATE_INPUT_FORMATS = ('%Y-%m-%d', '%Y/%m/%d')
然后将其应用于特定的DateTimeField:
expiry_date = forms.DateTimeField(widget=SelectDateWidget,
input_formats=settings.DATE_INPUT_FORMATS,
required=False)
特别需要'%Y-%m-%d'
才能让en
满意,而'%Y/%m/%d'
则允许zh-hans
和zh-hant
正常运作。
我通过在调试器中向下钻取并找出通过DateTimeField.to_python()
传递的值来找到这个。
我会将问题保持打开状态,因为我仍然希望了解为什么区域设置的格式不同,以及是否有更明显的方法来确定允许哪些格式什么时候我不认为解决方案应该是逐步通过调试器,直到找到代码行为止!"