我将FlightNo
、Terminal
和Status
保存到MongoDB中。我想创建一个更新页面,以便更新值。如何在WTForm字段中传递数据库中的现有值?
app.py
:
# Document just for your info!
Document = { "_id" : ObjectId("5bfffb603129d742ac94b990"), "flightno" : "LH-100", "terminal" : "A1", "status" : "Inbound" }
@app.route("/update/<id>"):
def update(id):
currFlight = db.find_one({"flightno": id})
form = FlightForm()
if request.method == "POST":
f = session["flightno"] = form.flightno.data
t = session["terminal"] = form.terminal.data
s = session["status"] = form.status.data
query = {"flightno": f}
update = {"$set": {"flightno": f, "terminal": t, "status": s}}
db.update(query, update)
return redirect(url_for("index"))
return render_template("update.html", currFlight=currFlight)
update.html
:
<form method="POST">
{{form.hidden_tag()}}
{{form.flightno.label}} {{form.flightno}} <br>
{{form.terminal.label}} {{form.terminal}} <br>
{{form.status.label}} {{form.status}} <br>
{{form.submit()}}
</form>
如何将currFlight
中的值传递到表单中,使字段中已经填充了currFlight
中的值?我尝试了value=""
,尽管它只适用于StringField
。Terminal
和Status
是SelectFields
,所以它不起作用。
当表单方法为"POST"时,您将从表单字段中读取值并将其保存在数据库中。以类似的方式,当表单方法是GET时,您可以从数据库中读取值并将其传递给表单
#after your if block
elif request.method == "GET":
form.flightno.data = currFlight.flightno
form.terminal.data = currFlight.terminal
form.status.data = currFlight.status
当页面第一次加载时,方法将是GET,表单字段将具有来自数据库的值。确保将表单传递到html模板,如下所示-
return render_template("update.html", currFlight=currFlight, form=form)