- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一个简单的 Flask
/Python
单页 Web 应用程序,该应用程序使用动态创建的 SelectField 选择。
但是,我无法使用动态创建的选择将其发送到 POST,并且还发生了一些有趣的验证行为(将在代码后解释)
我在这里创建了一个最小的失败示例:
from flask import Flask, render_template, flash, redirect
from flask_wtf import Form
from wtforms import IntegerField, SubmitField, SelectField
from wtforms.validators import DataRequired, NumberRange, Optional
# Set up app and config
DEBUG = True
SECRET_KEY = '42721564'
app = Flask(__name__)
app.config.from_object(__name__)
# Main stuff starts here
class SelectFieldForm(Form):
default_field = SelectField('Default Set SelectField', choices=[(i, i) for i in range(0,60,5)], coerce=int)
default_field_2 = SelectField('Default Set SelectField', choices=[(i, i) for i in range(0,60,5)], coerce=int)
dynamic_field = SelectField('Dynamically Set Selectfield', choices=[], validators=[Optional()], coerce=int)
get_default_field_value_difference = SubmitField(label='Get Default Field Difference')
deduct_dynamic_field_value = SubmitField(label='Deduct Dynamic Field Value')
@app.route('/mfe-dynamic-selectfield', methods=['GET', 'POST'])
def failingSelectField():
form = SelectFieldForm()
if form.validate_on_submit():
print("validated")
difference = form.default_field_2.data - form.default_field.data
if form.get_default_field_value_difference.data:
flash( difference )
form.dynamic_field.choices = [(i,i) for i in range(0,difference,5)]
return render_template('mfe-dynamic-selectfield.html', form=form)
if form.deduct_dynamic_field_value.data:
if form.dynamic_field.data:
deducted = difference - form.dynamic_field.data
flash( deducted )
else:
flash( "no dynamic field value chosen")
return render_template('mfe-dynamic-selectfield.html', form=form)
else:
flash( "nope" )
return render_template('mfe-dynamic-selectfield.html', form=form)
if __name__ == '__main__':
app.run()
调出页面效果很好,并立即闪烁“不”,正如预期的那样。
计算默认设置字段之间的差异:-只要它们都设置为“0”,每次都有效-如果任一字段未设置为“0”,则所有其他 POST 验证都会失败,并且时间会正确计算差异并动态设置最后一个字段。
尝试使用动态设置字段进行 POST 每次都会失败。
我在这里遗漏了一些非常明显的东西吗?
我正在使用这个进行渲染:
{% block content %}
<form action="" method="post" name="mfe-dynamic-selectfield">
{{ form.hidden_tag() }}
<table>
<tr>
<td> Calculated value </td>
<td>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</td>
</tr>
<br>
<tr>
<td>Default SelectField 1</td>
<td>Default SelectField 2</td>
<td>Dynamic Selectfield</td>
</tr>
<br>
<tr>
<td>{{ form.default_field }}</td>
<td>{{ form.default_field_2 }}</td>
<td>{{ form.dynamic_field }}</td>
</tr>
<tr>
<td>{{ form.get_default_field_value_difference }}</td>
<td>{{ form.deduct_dynamic_field_value }}</td>
</tr>
</table>
</form>
{% endblock %}
最佳答案
每隔一段时间就会失败,因为 form.dynamic_field
的值在 0
和 None
之间波动。仅当值为 None
时,表单才会通过验证。
这是因为 form.dynamic_field.choices
在验证时是 []
(空列表)。因此任何到达那里的值都会被拒绝。您可能希望在尝试验证之前动态设置选择;也许是这样的:
@app.route('/mfe-dynamic-selectfield', methods=['GET', 'POST'])
def failingSelectField():
form = SelectFieldForm()
# Calculate dynamic field choices
try:
difference = form.default_field_2.data - form.default_field.data
form.dynamic_field.choices = [(i,i) for i in range(0,difference,5)]
except TypeError:
pass
if form.validate_on_submit():
# (continue as usual)
现在表单将按预期进行验证。
当然,您可能应该在前面添加一些代码,以确保 default_field
确实具有有效的选择值(而不仅仅是任意两个整数)。另一种选择是将dynamic_field
放入第二种形式。然后您可以验证第一个表单,并使用其值来计算第二个表单的有效选择。
关于python - Flask/Python/WTForms 验证和动态设置 SelectField 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42721564/
我对此有点疑问。以下是我创建的内容的概述:一个简单的表单,其中包含 2 个选择字段、1 个文件上传字段和一个提交按钮。第一个选择将从 sql 数据库中提取它的选择(我已经完成了)然后根据用户从 Sel
是否可以在material-ui中更改SelectField的弹出框背景颜色? 我 checkin 了生成的主题,但没有 selectField 或 popover 键。尝试更改menu的backgr
我只想获取公司的名称并将其保存到数据库 我正在尝试使用文本做,并尝试使用下面的代码来获取 sport: this.refs.company.getValue(), 并且运行完美。 然后我决定使用Sel
我有一个 SelectField,我想使用 WTForms 添加验证。这些字段从动态下拉列表中获取其值,因为它是一对区域/城市选择的城市字段,用户首先选择区域,然后城市选项切换以显示所选区域的城市:
我已经在表单字段的简单渲染上苦苦挣扎了近一天。如果您能在这方面帮助我,那就太好了。 我正在使用 Flask-WTF,python 2.7。 我正在尝试使用自定义 ListWidget 呈现 Selec
我对 Sencha 触摸选择字段更改事件感到震惊。通常的更改事件工作正常。但如果像这样的选项值, { xtype: 'selectfield', label: 'Choose on
首先,我最近才开始使用 Flask,所以我现在完全是个新手,但我喜欢它,希望能在以后的过程中提高我的技能。但是,我可能缺少一些非常基本的东西,例如:我创建了包含 selectfield 的表单: cl
我在表单中有一个选择字段,现在我需要迭代该字段中的选项。 {{ form.myselect }} 给我这个: --------- Item 1 Item 2 ...
我想创建一个自定义 SelectField,它根据当前日期提供不同的选择。例如,如果是该月的 13 日,则选项将为值 1 到 13。我该怎么做? def register_extensions(app
我对Python世界很陌生,我正在尝试将外部API与Google Apple引擎一起使用,我想使用填充有Api的json响应的selectField来验证表单。 这是我的代码 class Commen
有谁知道如何控制SelectField的popover的位置? 我知道 selectfield 在其中包含一个下拉菜单并且不包含弹出框,但认为也许可以以某种方式控制它。 最佳答案 我实际上遇到了同样的
我在提交时难以在 Flask 应用程序的 WTForms 页面中获取当前选定的项目。 form.tableselector.data 的值在提交时始终等于 1,无论 SelectField 中的哪个项
我正在实现一个简单的表单,其中包含用于收集数据的字段。我需要对一些字段(如文本字段、复选框和单选按钮)实现验证。 根据文档,要使用的属性是“errorText” 根据网站( http://www.ma
第一个问题:动态输入到 SelectField(选择)中,在我的数据库(sqlite,使用 SqlAlchemy)中,我有一个表,从这个表中我不会选择 SelectField 中的所有条目。作为选择的
如何在sencha touch中存储selectfield,这样当选择一个字段时,任何方法使用的值,但当页面刷新时,它会自动选择上一个选择。 我的代码: {
我正在制作一个表单,其中根据之前的选择启用和禁用了字段。但是,当我禁用 SelectField(意味着它未提交)时,验证会因“无效选择”而失败。即使未提交,如何让它验证? print(form.err
在使用 Flask/SQLalchemy 构建的应用程序中实现 WTForms SelectField 时,我遇到了许多错误。 相关代码如下: Views.py: form = ReviewForm(
我做了一个这样的 SelectField: # constants.py QUESTION_LIST = {} QUESTION_LIST['QuestionOne'] = { 'disagree-s
我正在 Sencha Touch 1.1 中创建一个带有两个级联选择字段的表单。 选择品牌后,模型列表将被过滤,以便仅显示与品牌相关的模型。第一次选择后,列表正确显示。 如果选择的另一个 Make 具
这有点难以解释,所以我正在尽力,如果我的问题含糊不清,请要求更清楚。 我正在使用商店中的选项填充选择字段。该表单显示在用户单击我的常规 ListView 中的一行时获得的详细 View 上。这一切都完
我是一名优秀的程序员,十分优秀!