我有一个Django表单,其中包含如下所示的DateInput:
Fecha = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=(date.today() - timedelta(1)))
这个想法是,每当你访问包含表单的模板时,它会自动显示day-1 date.In我的开发环境它作为expected.However工作,我注意到我的生产环境中有一些奇怪的东西。除非我重新启动我的DateField服务器,否则Apache初始值不会改变。例如,如果我现在重新启动Apache,我的表单将显示2015-02-26作为初始日期,并将一直保持到我再次重新启动Apache。我不确定这是与Django有关,还是与Apache配置有关。有什么建议或变通方法吗?提前感谢!
致以敬意,
Alejandro
发布于 2015-02-28 16:06:01
不是应该这样的吗:
def get_yesterday():
return datetime.today() - timedelta(days=1)
mydatefield = forms.DateField(widget=DateInput(format = '%Y-%m-%d'),initial=get_yesterday)
您的代码将在服务器初始化时而不是在表单初始化时计算date.today()函数。
发布于 2017-01-27 22:48:51
这既不是django问题,也不是Apache配置问题,而是Python如何以及何时评估代码的结果。一旦包含类的模块被导入/引入内存,就会对类属性进行评估。因此,窗体类的Fecha
属性仅在应用程序启动时进行初始计算,并且在应用程序重新启动之前不会再次进行计算。
要解决这个问题,只需在视图实例化form对象时提供初始日期值,而不是在form类定义中提供。这是可行的,因为每次刷新页面时都会执行视图函数:
import MyForm
def my_view(request):
my_form_instance = MyForm(initial={'Fecha': date.today() - timedelta(1)})
...
https://stackoverflow.com/questions/28771140
复制相似问题