python - WTForms TimeField 默认值
问题描述
我使用WTForms制作了一个编辑表单。
现在我想在TimeField表单中创建一个从数据库预填充的默认值。
这是上面表格中的代码片段:
from wtforms.fields.html5 import TimeField
class ScheduleForm(Form):
start_at = TimeField('Start at',validators=[required()])
end_at = TimeField('End at', validators=[required()])
# ...
# ...
我尝试在obj
我调用表单的路由上调用参数,如下所示:
@app.route('/edit_schedule/<int:schedule_id>', methods=['GET', 'POST'])
def edit_schedule(schedule_id):
schedule = Schedule.query.filter_by(id=schedule_id).first()
print(schedule.start_at) # I got the value from database here
print(schedule.end_at) # I got the value from database here
form = ScheduleForm(obj=schedule) # call the obj argument
但是该字段上的值仍然没有预先填充,然后我尝试像这样设置默认值:
form = ScheduleForm(obj=schedule)
form.end_at.default = schedule.start_at
form.end_at.default = schedule.end_at
仍然没有工作,然后我尝试在波纹管下面添加我上面设置的默认值:
form.process()
仍然没有工作,然后我尝试使用lambda
:
form.start_at.default = lambda: db.session.query(Schedule.start_at).filter_by(id=schedule.id).first()
form.end_at.default = lambda: db.session.query(Schedule.end_at).filter_by(id=schedule.id).first()
上述所有方式都没有人奏效。
所以我的问题的重点是,如何在TimeField上设置或预填充默认值..?
编辑:这是我的模型代码片段:
class Schedule(db.Model):
__tablename__ = 'schedule'
id = db.Column(db.Integer, primary_key=True)
start_at = db.Column(db.Time())
end_at = db.Column(db.Time())
解决方案
你必须填充form.start_at.data
和form.end_at.data
form.end_at.data = schedule.start_at
form.end_at.data = schedule.end_at
我猜默认值在初始化时会被初始化一次。
推荐阅读
- java - Spring集成TcpOutboundGateway、ServiceActivator、消息通道和错误MessageDispatchingException:Dispatcher没有订阅者
- python - 运行 for 循环以获取图像时未显示图像
- vue.js - 从外部文件读取数据到 vuex 存储
- swift - end.index 不识别字符串中的字母
- c# - 为什么打印是对角线
- scala - 如何避免在Scala中绑定类型的重复
- azure - 如何从 Azure DevOps Pipeline 创建 Azure 服务队列?
- python - Django:处理后 JSON 请求
- key - Debian 安装:密钥交换和与接入点的关联失败
- javascript - TypeError:Text.isText 不是函数