Python / Flask / WTForm / Jinja:将变量值传递给wftform字段中的“更新页面”

时间:2018-11-29 15:47:11

标签: python flask wtforms

我将FlightNoTerminalStatus保存到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一起使用。 TerminalStatusSelectFields,因此无效。

1 个答案:

答案 0 :(得分:0)

当表单方法为“ POST”时,您将从表单字段中读取值并将其保存在数据库中。以类似的方式,当form方法是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)