WTForms TimeField 默认值
WTForms TimeField default value
我正在使用 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
我猜默认值在初始化时被初始化了一次。
我通过在我的模板上设置默认值来解决这个问题,如下所示:
{{ f.render_field(form.start_at, value=schedule.start_at) }}
{{ f.render_field(form.end_at, value=schedule.end_at) }}
我正在使用 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
我猜默认值在初始化时被初始化了一次。
我通过在我的模板上设置默认值来解决这个问题,如下所示:
{{ f.render_field(form.start_at, value=schedule.start_at) }}
{{ f.render_field(form.end_at, value=schedule.end_at) }}