我有一个Django表单,它包含一个DateInput,如下所示:
Fecha = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=(date.today() - timedelta(1)))
其想法是,每次访问包含表单的模板时,它都会自动显示第一天的日期。在我的开发环境中,这是意料之中的事。然而,我在生产环境中发现了一些奇怪的东西。除非重新启动Apache Server,否则DateField初始值不会更改。例如,如果我现在重新启动Apache,我的表单将显示2015-02-26作为初始日期,并且在我再次重新启动Apache之前一直如此。我不确定这是与Django有关,还是与Apache配置有关。有什么建议或解决办法吗?提前感谢!!!!
问候,
Alejandro
它不应该是这样的吗:
def get_yesterday():
return datetime.today() - timedelta(days=1)
mydatefield = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=get_yesterday)
您的代码将在服务器初始化时而不是在表单初始化时计算date.today()函数。
这既不是django问题,也不是Apache配置问题,而是Python如何以及何时评估代码的结果。一旦将包含类的模块导入/放入内存,就会评估类属性。因此,表单类的Fecha
属性仅在应用程序启动时初始评估,在应用程序重新启动之前不会再次评估。
要处理此问题,只需在视图实例化表单对象时提供初始日期值,而不是在表单类定义中。这将起作用,因为每次刷新页面时都会执行查看功能:
import MyForm
def my_view(request):
my_form_instance = MyForm(initial={'Fecha': date.today() - timedelta(1)})
...