首页 > 解决方案 > 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())

标签: pythonflaskflask-wtformswtforms

解决方案


你必须填充form.start_at.dataform.end_at.data

form.end_at.data = schedule.start_at
form.end_at.data = schedule.end_at

我猜默认值在初始化时会被初始化一次。


推荐阅读