使用 datetime.utcnow / 可调用的 WTForms StringField 动态默认值?
WTForms StringField Dynamic Default Value using datetime.utcnow / Callable?
我有一个包含以下内容的 WTForm:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
创建新表单后,默认时间戳字段按预期更新,而默认名称字段继续使用应用程序启动时的时间戳。我可以在我的路线中成功设置时间戳,我的偏好是利用表单的默认功能。看这里:
它声明默认值 "May be a callable.",但我无法找到这方面的工作示例。我假设如果我将其设为可调用,则默认值将使用当前时间戳进行更新。有谁知道如何让 default 从函数中获取它的值?
提前致谢,
布莱恩
在您的 timestamp
字段中,您提供了一个可调用项 - datetime.datetime.utcnow
到 default
,因此每次实例化表单时都会调用可调用项并使用新结果。
在您的 name
字段中,编译表单时会计算 datetime.datetime.utcnow().timestamp()
,因此表单的每个实例的默认值都相同。
如果您希望每次实例化表单时都计算 name
的默认值,请向其传递一个 returns datetime.datetime.utcnow().timestamp()
.[=20 的函数(可调用) =]
像这样:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
或者如果您愿意,可以使用 lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
我有一个包含以下内容的 WTForm:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
创建新表单后,默认时间戳字段按预期更新,而默认名称字段继续使用应用程序启动时的时间戳。我可以在我的路线中成功设置时间戳,我的偏好是利用表单的默认功能。看这里:
它声明默认值 "May be a callable.",但我无法找到这方面的工作示例。我假设如果我将其设为可调用,则默认值将使用当前时间戳进行更新。有谁知道如何让 default 从函数中获取它的值?
提前致谢,
布莱恩
在您的 timestamp
字段中,您提供了一个可调用项 - datetime.datetime.utcnow
到 default
,因此每次实例化表单时都会调用可调用项并使用新结果。
在您的 name
字段中,编译表单时会计算 datetime.datetime.utcnow().timestamp()
,因此表单的每个实例的默认值都相同。
如果您希望每次实例化表单时都计算 name
的默认值,请向其传递一个 returns datetime.datetime.utcnow().timestamp()
.[=20 的函数(可调用) =]
像这样:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
或者如果您愿意,可以使用 lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])