我们遇到了类似的问题,这让我发疯,我已经解决了,但我找不到重现该错误的原因或模式。
我们也DATE_INPUT_FORMATS
对设置进行了定义,并且验证按预期工作。现在我们正在将一个导致 Bad Gateways 的重要特性转移到 celery 任务中,并且某些表单将在任务中被初始化。第一天测试一切正常,但昨天我们遇到了一些问题。
我们有两个DateField
表单,格式相同,有时其中一个会引发验证错误。我找不到任何日期模式;每次我重新加载页面,选择日期并启动任务时,即使选择相同的日期,行为似乎也会有所不同(有时会得到验证,有时不会)。如果我pdb
在调用任务之前使用并手动初始化表单,它会被正确验证。我还检查了任务中的表单数据是否完全相同,所以问题一定与Celery
设置有关DATE_INPUT_FORMATS
。
最终我通过input_formats
在表单的有问题的字段上定义可选参数来解决它:
class DateFilterForm(forms.Form):
date_from = forms.DateField(
widget=forms.DateInput(
format='%d/%m/%Y', attrs={'class': 'date_input'}
)
)
date_to = forms.DateField(
input_formats = ['%d/%m/%Y'],
widget=forms.DateInput(
format='%d/%m/%Y', attrs={'class': 'date_input'}
)
)
这样它总是可以正常工作,尽管我无法弄清楚它背后的逻辑。我们当前的环境使用Django==1.4.16
and celery==2.5.1
,如果有人感兴趣的话(我们希望尽快升级,所以我会检查这是否解决了原来的问题)。