我是 Python 和 Flask 的新手。我正在嘗試使用 WTForm FlaskForm,但在 SelectField 中的選擇存在問題。我正在建立這樣的表格。
class FightForm(FlaskForm):
fight_id = StringField('fight_id', render_kw={'readonly': True})
fight_type_id = SelectField('fight_type_id',
choices=[(t.fight_type_id, t.type_name) for t in fight_type.query.all()], validate_choice=False, validators=[DataRequired()])
這些選項似乎只加載 1 次。如果我去添加一個新的fight_type,我必須停止應用程式并重新啟動它才能重繪 。
另外,我找到了這個答案,flask wtforms selectfield selections not update,但是 FlaskForm 不會觸發__init__這個建議的功能。
無論如何,我暫時將其更改為 Form 并收到一條錯誤訊息,提示fight_type_id 不屬于表單(釋義)。
每次呼叫頁面時,我都希望這些重繪 。
uj5u.com熱心網友回復:
我認為你應該看看WTForms-SQLAlchemy擴展。
QuerySelectField根據提交的資料庫查詢動態加載所有資料庫條目。可以為條目的標簽定義一列。提交表單時,會自動從資料庫中查詢選中的物件,并由欄位回傳。
class FightType(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False, unique=True)
from flask_wtf import FlaskForm
from wtforms.validators import InputRequired
from wtforms_sqlalchemy.fields import QuerySelectField
class FightForm(FlaskForm):
fight_type = QuerySelectField(
get_label='name',
query_factory=lambda: FightType.query.all(),
validators=[InputRequired()]
)
@app.route('/new', methods=['GET', 'POST'])
def create():
form = FightForm(request.form)
if form.validate_on_submit():
fight_type = form.fight_type.data
print(fight_type)
return render_template('create.html', **locals())
<form method="post">
{{ form.csrf_token }}
{{ form.fight_type.label }} {{ form.fight_type() }}
<input type="submit" value="Go">
</form>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/432448.html
標籤:Python 烧瓶 烧瓶-wtforms
上一篇:如何更新標記的資訊視窗?
