Django在Apache中没有更新DateField初始值

时间:2015-02-27 17:43:05

标签: django apache datefield

我有一个包含像这样的DateInput的Django表单:

Fecha = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=(date.today() - timedelta(1)))

这个想法是每次访问包含表单的模板时,它会自动显示第1天的日期。在我的开发环境中,这可以按预期工作。但是,我注意到我的生产环境中有些奇怪。除非我重新启动Apache服务器,否则DateField初始值不会更改。例如,如果我现在重新启动Apache,我的表单将显示2015-02-26作为初始日期,并将保持这样,直到我再次重新启动Apache。我不确定这是否与Django相关,或者它与Apache配置有更多关系。有任何建议或解决方法吗?在此先感谢!!!!

此致

亚历

2 个答案:

答案 0 :(得分:0)

不应该是这样的:

def get_yesterday():
    return datetime.today() - timedelta(days=1)
mydatefield = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=get_yesterday)

您的代码将在服务器初始化时评估date.today()函数,而不是在表单初始化时。

答案 1 :(得分:0)

这既不是django问题也不是Apache配置问题,而是Python评估代码的方式和时间的结果。只要包含类的模块被导入/带入内存,就会评估类属性。因此,您的表单类的import MyForm def my_view(request): my_form_instance = MyForm(initial={'Fecha': date.today() - timedelta(1)}) ... 属性仅在您的应用启动时进行初始评估,并且在您的应用重新启动之前不会再次评估。

要处理此问题,只需在视图实例化表单对象而不是表单类定义时提供初始日期值。这将起作用,因为每次刷新页面时都会执行视图功能:

_WIN32