Django:在芹菜任务错误之后,日期时间输入格式在网站上无效

时间:2013-08-21 14:51:49

标签: django celery

我的某个网站遇到了一个相当奇怪的问题。 我有一个Django站点(使用uWSGI和NGINX)和一个芹菜实例。 芹菜和网站都是通过supervisord管理的。

我在settings.py文件中有以下设置:

DATE_INPUT_FORMATS = (
    '%d/%m/%Y',
    '%Y-%m-%d',
)

但是,如果其中一个芹菜任务抛出错误(或者它似乎与发生的情况一致),突然当我在网站上的表单中输入日期时,它表示这是一个无效的日期。

我无法在任何地方找到任何相关信息。 有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

我们遇到了类似的问题并且让我发疯,我已经解决了这个问题,但我找不到原因,也没有找到重现错误的模式。

我们也在设置中定义了DATE_INPUT_FORMATS,验证工作正常。现在我们正在移动一个重要的功能,导致Bad Gateways进入芹菜任务,并且某个表单将在任务内部初始化。测试的第一天工作正常,但昨天我们遇到了一些问题。

我们在表单中有两个DateField,格式相同,有时其中一个会抛出验证错误。我无法找到任何日期模式;每次我重新加载页面,选择日期并启动任务,即使选择相同的日期,行为似乎也不同(有时它会得到验证,有时不会)。如果我在调用任务之前使用pdb并手动初始化表单,则表明它已正确验证。我还检查过任务中的表单数据是否完全相同,因此问题必须以某种方式与CeleryDATE_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.16celery==2.5.1,如果有人有兴趣(我们希望尽快升级,所以我会检查是否能解决原始问题)。