使用 Flask 和 wtform 实现 Python 日期时间增量
Implement Python datetime delta with Flask and wtform
使用 flask 和 wtforms 我想控制用户输入的 date_from
和 date_to
。
now = datetime.today()
two_month_ago = now - timedelta(days=60)
date_from = DateTimeField('date_from', format='%Y%m%d',validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')], default=two_month_ago)
date_to = DateTimeField('date_to', format='%Y%m%d',validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')], default=now)
此代码运行良好,但我发现返回的数据始终相同。调试后的原因是现在它正在被存储。为了解决这个问题,有人提到直接使用 datetime.today
而不是 datetime.today()
。但是我已经不能再用两个月前的delta来计算了。如何克服这个问题?
我认为你需要将默认设置为可调用。
from datetime import datetime, timedelta
def two_months_ago():
return datetime.today() - timedelta(days=60)
class MyForm(FlaskForm):
date_from = DateTimeField(
'date_from',
format='%Y%m%d',
validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')],
default=two_month_ago()
)
date_to = DateTimeField(
'date_to',
format='%Y%m%d',
validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')],
default=datetime.today()
)
使用 flask 和 wtforms 我想控制用户输入的 date_from
和 date_to
。
now = datetime.today()
two_month_ago = now - timedelta(days=60)
date_from = DateTimeField('date_from', format='%Y%m%d',validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')], default=two_month_ago)
date_to = DateTimeField('date_to', format='%Y%m%d',validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')], default=now)
此代码运行良好,但我发现返回的数据始终相同。调试后的原因是现在它正在被存储。为了解决这个问题,有人提到直接使用 datetime.today
而不是 datetime.today()
。但是我已经不能再用两个月前的delta来计算了。如何克服这个问题?
我认为你需要将默认设置为可调用。
from datetime import datetime, timedelta
def two_months_ago():
return datetime.today() - timedelta(days=60)
class MyForm(FlaskForm):
date_from = DateTimeField(
'date_from',
format='%Y%m%d',
validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')],
default=two_month_ago()
)
date_to = DateTimeField(
'date_to',
format='%Y%m%d',
validators=[DateRange(min=anchor_date, max=None, format='%Y%m%d')],
default=datetime.today()
)