动态选择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"

  1. 如何将我的groups_list传递给表单?我试图在FlaskForm模型中实现形成过程,但是看不到current_user对象
  2. 当我需要将groupID像元组

回答:

这里的主要思想是在实例化之后将选择列表分配给该字段。为此,你需要使用arguments 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"

以上是 动态选择WTForms Flask SelectField 的全部内容, 来源链接: utcz.com/qa/434918.html

回到顶部