gpt4 book ai didi

python - WTForms StringField 动态默认值使用 datetime.utcnow/Callable?

转载 作者:行者123 更新时间:2023-12-01 08:42:26 25 4
gpt4 key购买 nike

我有一个 WTForm,其中包含以下内容:

class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...

创建新表单后,默认时间戳字段将按预期更新,而默认名称字段继续使用应用程序启动时的时间戳。我可以成功地在我的 route 设置时间戳,我的偏好是利用表单的默认功能。看这里:

The Field base class

它指出默认值“可能是可调用的”。但我还没有找到一个有效的例子。我假设如果我将其设为可调用,则默认值将使用当前时间戳进行更新。有谁知道如何使默认值从函数中获取其值?

提前致谢,

布莱恩

最佳答案

在您的 timestamp 字段中,您向 default 提供可调用的 - datetime.datetime.utcnow,因此每次实例化表单时调用 callable 并使用新结果。

在您的 name 字段中,编译表单时会评估 datetime.datetime.utcnow().timestamp(),因此默认值对于每个表单的实例。

如果您希望每次实例化表单时都计算 name 的默认值,请向其传递一个返回 datetime.datetime.utcnow().timestamp 的函数(可调用) ().

像这样:

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()])

关于python - WTForms StringField 动态默认值使用 datetime.utcnow/Callable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com