Flask - WTForm - 使用查询结果作为 RadioField 选择
Flask - WTForm - Using Query results as RadioField Choices
引用以下表格。
CONTROL_CHOICES = Session.query(schema.OfficeType).order_by(schema.OfficeType.descr).all()
CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]
class ControlForm(Form):
institution = RadioField('Institution', choices=CONTROL_CHOICES)
date = DateField('Date')
submit = SubmitField('SUBMIT')
简单HTML
<form action="composition_profile" method="get">
{{control_form.hidden_tag()}}
{{control_form.institution.label}}
{{control_form.institution}}
{{control_form.date.label}}
{{control_form.date}}
{{control_form.submit}}
</form>
单选字段打印成功
然而,在填写表格时,validate_on_submit()
没有打印错误,但不执行if
中的代码
validate()
打印以下错误。
{'institution': ['Not a valid choice']}
@app.route('/composition_profile', methods=['GET', 'POST'])
def composition_profiles():
if request.method == 'GET':
if request.args.get('institution') and request.args.get('date'):
form = ControlForm(request.args)
print(form.institution.data)
if form.validate():
print('terms')
print(form.errors)
知道它是如何导致不正确的选择的吗?我不太确定发生了什么。将其更改为 QuerySelectField
可行,但我想要收音机功能
考虑重构:
def my_view():
class F(MyBaseForm):
pass
F.username = TextField('username')
for name in iterate_some_model_dynamically():
setattr(F, name, TextField(name.title()))
form = F(request.POST, ...)
# do view stuff
来源:http://wtforms.simplecodes.com/docs/1.0.1/specific_problems.html#dynamic-form-composition
问题似乎是由于 WTForm 期望 Value
字段是 String
而不是 Integer
改变
CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]
到
CONTROL_CHOICES = [(str(office.id), office.descr) for office in CONTROL_CHOICES]
缓解问题
引用以下表格。
CONTROL_CHOICES = Session.query(schema.OfficeType).order_by(schema.OfficeType.descr).all()
CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]
class ControlForm(Form):
institution = RadioField('Institution', choices=CONTROL_CHOICES)
date = DateField('Date')
submit = SubmitField('SUBMIT')
简单HTML
<form action="composition_profile" method="get">
{{control_form.hidden_tag()}}
{{control_form.institution.label}}
{{control_form.institution}}
{{control_form.date.label}}
{{control_form.date}}
{{control_form.submit}}
</form>
单选字段打印成功
然而,在填写表格时,validate_on_submit()
没有打印错误,但不执行if
validate()
打印以下错误。
{'institution': ['Not a valid choice']}
@app.route('/composition_profile', methods=['GET', 'POST'])
def composition_profiles():
if request.method == 'GET':
if request.args.get('institution') and request.args.get('date'):
form = ControlForm(request.args)
print(form.institution.data)
if form.validate():
print('terms')
print(form.errors)
知道它是如何导致不正确的选择的吗?我不太确定发生了什么。将其更改为 QuerySelectField
可行,但我想要收音机功能
考虑重构:
def my_view(): class F(MyBaseForm): pass F.username = TextField('username') for name in iterate_some_model_dynamically(): setattr(F, name, TextField(name.title())) form = F(request.POST, ...) # do view stuff
来源:http://wtforms.simplecodes.com/docs/1.0.1/specific_problems.html#dynamic-form-composition
问题似乎是由于 WTForm 期望 Value
字段是 String
而不是 Integer
改变
CONTROL_CHOICES = [(office.id, office.descr) for office in CONTROL_CHOICES]
到
CONTROL_CHOICES = [(str(office.id), office.descr) for office in CONTROL_CHOICES]
缓解问题