[英]Dynamic choices WTForms Flask SelectField
我正在嘗試使用FlaskForms將userID變量傳遞給WTForms。 首先,我將顯示可以正常工作的代碼,然后顯示需要修改的內容(該部分我不知道如何)。 我正在添加與某個組關聯的新名稱。
FlaskForm模型:
class AddName(FlaskForm):
name =StringField('Device name', validators=[InputRequired(),Length(min=4, max=30)])
groupID = SelectField('Payload Type', choices=[(1,"Group1"),(2,"Group2")], validators=[InputRequired])
查看模型:
@app.route('/dashboard/addname', methods=['GET', 'POST'])
def addname():
form=AddName()
if form.validate_on_submit():
name=Name(form.name.data,form.groupID.data)
db.session.add(name)
db.session.commit()
return "New name added"
模板:
<form method="POST" action="/dashboard/addname">
<h2>Add name</h2>
{{ form.hidden_tag() }}
{{ wtf.form_field(form.name) }}
{{ wtf.form_field(form.groupID) }}
<button type="submit">Add name</button>
</form>
我在下拉列表中看到正確的列表,並且在提交時會給我正確的數字。
任務:我需要基於current_user.userID傳遞不同的列表。 我正在使用SQLAlchemy通過從數據庫表中查詢來形成列表,所以My Flask視圖是:
@app.route('/dashboard/addname', methods=['GET', 'POST'])
def addname():
available_groups=db.session.query(Groups).filter(Groups.userID == currend_user.userID).all()
#Now forming the list of tuples, so it's ok for SelectField
groups_list=[(i.groupID, i.groupName) for i in available_groups]
form=AddName()
if form.validate_on_submit():
name=Name(form.name.data,form.groupID.data)
db.session.add(name)
db.session.commit()
return "New name added"
這里的主要思想是在實例化之后將選擇列表分配給該字段。 為此,您需要使用參數coerce=int
。 SelectField的coerce關鍵字arg表示我們使用int()來強制轉換表單數據。 默認強制為unicode()。
正確的FormModel:
class AddName(FlaskForm):
name =StringField('Device name', validators=[InputRequired(),Length(min=4, max=30)])
groupID = SelectField('Payload Type', coerce=int, validators=[InputRequired])
正確的視圖:
@app.route('/dashboard/addname', methods=['GET', 'POST'])
def addname():
available_groups=db.session.query(Groups).filter(Groups.userID == currend_user.userID).all()
#Now forming the list of tuples for SelectField
groups_list=[(i.groupID, i.groupName) for i in available_groups]
form=AddName()
#passing group_list to the form
form.groupID.choices = groups_list
if form.validate_on_submit():
name=Name(form.name.data,form.groupID.data)
db.session.add(name)
db.session.commit()
return "New name added"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.