我有一个包含像这样的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配置有更多关系。有任何建议或解决方法吗?在此先感谢!!!!
此致
亚历
答案 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