我正在使用WTForms制作表单。目前,我有这个:
class UploadForm(flask_wtf.Form):
fichier = wtforms.fields.FileField(u'Fichier')
description = wtforms.fields.TextAreaField(u'Description')
year = wtforms.fields.SelectField(u'Année', choices=[('1A','1A'),('2A','2A')])
subject = wtforms.fields.SelectField(u'Matière', choices=app.config['SUBJECTS'])
submit = wtforms.fields.SubmitField(u'Envoyer')
使用SUBJECTS = [('Sub1','Sub1'), ('Sub2','Sub2')]
和此模板:
{% block content %}
<h2>Form</h2>
<form action="{{ url_for('get') }}" method="post"
enctype="multipart/form-data">
{{ form.hidden_tag() }}
{{ form.fichier.label }}
{{ form.fichier }}
{{ form.description.label }}
{{ form.description }}
{{ form.year.label }}
{{ form.year }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.submit }}
</form>
{% endblock %}
但是所有年份的主题都不尽相同,因此我想使主题字段的列表动态化,以便仅提出与所选年份相对应的主题。知道我该怎么做吗?
您可以通过在视图中分配构造后来自定义选项值:
def view():
form = UploadForm(request.form, ...)
if form.year.data == '1A':
form.subject.choices = SUBJECTS_1A
else:
form.subject.choices = SUBJECTS_2A
if request.form and form.validate():
[...]
当然,将dicts用作查找映射甚至更pythonic。
SUBJECTS_BY_YEAR = {
'1A': [('a', 'a'), ('b', 'b')],
'2A': [...],
}
def view():
form = UploadForm(request.form)
form.subject.choices = SUBJECTS_BY_YEAR.get(form.year.data) or []
只要validate()
调用之前已设置的选项,就可以进行。
作为参考,请参阅WTForms文档中“动态选择”中的SelectField。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句