我正在尝试从我的表单中传递一些动态值,但到目前为止我只获得空值。
我有一个自动完成插件,我从JSON对象中搜索“名称”,每次我选择一个他们将传递到value="the ID"
的列表。
我在WTForms
找不到无序列表,所以我使用的是SelectMultipleField
,因为它可以将多个值作为数组/列表传递
我的表单类看起来像这样:
class ClassForm(Form):
function_name = StringField('names')
studentid = SelectMultipleField('studentid')
submit = SubmitField('submit')
然后在我的模板中我就像这样使用它
<form id="function_search_form" method="post" action="">
{{ form.csrf_token }}
{{form.function_name.label()}}
{{form.function_name()}}
<!-- then I am not using studentid directly,
but just normal html, so each time you pass
in a name from the json object it will come in like this.
-->
<ol class='student-list'>
<li value="1" name="studentid" id="studentid">test</li>
</ol>
{{ form.submit()}}
</form>
我的问题是它不会从列表中获取值,即使我直接硬编码值,而不是jquery脚本。
以下是我的观点的样子
@app.route('/index', methods=['GET', 'POST'])
def index():
form = ClassForm()
if request.method == 'POST' and form.validate_on_submit():
flash('valid form')
st = form.studentid.data
print(st)#debug
return render_template('index.html', form=form)
我每次提交时都会打印form.studentid.data
我收到[]
,这是一个空列表。
即使我尝试传递单个值并将studentid
设为StringField
,我仍然会获得空值。
我也试过request.form['studentid']
,但后来我收到错误请求我做错了什么,是否有其他方式传递“自定义”值?
答案 0 :(得分:1)
它不起作用的原因是因为<li>
不是表单控件,所以它的数据不会随表单请求一起发回。
您永远不会从表单类中呈现studentid
字段,因此永远不会呈现表单控件。这就像期待以下工作:
<form>
<p name="foo" data="hello">This should be sent</p>
<input type="submit">
</form>
要将数据恢复到view方法,您需要使用表单控件 - 您可以像这样测试它:
<form id="function_search_form" method="post" action="">
{{ form.csrf_token }}
{{form.function_name.label()}}
{{form.function_name()}}
<select name="studentid" class='student-list'>
<option value="1">test</option>
</select>
{{ form.submit()}}
</form>
或者,只需正确渲染字段:
<form id="function_search_form" method="post" action="">
{{ form.csrf_token }}
{{form.function_name.label()}}
{{form.function_name()}}
{{form.studentid.label()}}
{{form.studentid}}
{{ form.submit()}}
</form>