在我用 Flask 构建的网站中我正在使用 WTForms用于表单验证。我目前有一个字段依赖于另一个字段:如果用户插入特定年份(2012 年),则会使用 Javascript 插入几个单选按钮。我将 RadioField 设为可选,效果很好,但如果我确实提交了带有单选按钮的表单,它的值仍然是 None
。
谈论一些代码;两个相关的表单字段定义如下:
construction_year = IntegerField('construction_year')
transfer_tax_rate = SelectField('transfer_tax_rate', validators=[Optional()], choices=[('ZERO', '0%'), ('SIX', '6%')])
我首先在模板中使用的显示construction_year
和transfer_tax_rate
的代码如下:
{{ form.construction_year(size=10) }}
{{ form.transfer_tax_rate() }}
这很好用;我可以像这样在后端打印出值:
if form.validate_on_submit():
print form.construction_year.data # prints out '2012'
print form.transfer_tax_rate.data # prints out ZERO or SIX depending on my choice
然后我删除了 {{ form.transfer_tax_rate() }}
并编写了一些 Javascript,如果 construction_year
是 2012 年,它会插入一些 html:
function displayTransferTaxRate(){
var year = $("#construction_year").val();
var propertyType = $("#property_type").val();
if (year.length == 4 && year == 2012) {
var transferTaxRateHtml = 'Applicable tax rate <select id="transfer_tax_rate" name="transfer_tax_rate"><option value="ZERO">0%</option><option value="SIX">6%</option></select>';
$('#transfer-tax-rate-div').html(transferTaxRateHtml);
} else {
$('#transfer-tax-rate-div').html('');
}
}
$("#construction_year").on('keyup paste', displayTransferTaxRate);
方便阅读;它插入的html如下:
<select id="transfer_tax_rate" name="transfer_tax_rate">
<option value="ZERO">0%</option>
<option value="SIX">6%</option>
</select>
html 插入正常,我可以选择其中一个选项。但是当我提交表单并尝试如下获取 transfer_tax_rate 的值时,它总是打印出 None
:
if form.validate_on_submit():
print form.construction_year.data # prints out '2012'
print form.transfer_tax_rate.data # prints out None
有人知道我在这里做错了什么吗?欢迎所有提示!
[编辑]
按照下面 user3147268 的提示,我也尝试从标准 flask request.form
获取它,但它也不包含 'transfer_tax_rate'
的条目。
最佳答案
好吧,在我用头撞墙大约 5 个小时之后,我会回答我自己的问题,因为你们不可能知道这一点。
事实证明,它与嵌入此表格的表格有关。我遗漏了这些信息,因为我没想到它会是相关的。
所以这很好用:
<table>
<form action="" method="post" id="prop-form">
{{ form.hidden_tag() }}
<tr>
<td>Construction year: </td>
<td>
{{ form.construction_year(size=10) }}
</td>
</tr>
<tr>
<td>Transfer tax rate: </td>
<td>
{{ form.transfer_tax_rate()
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Save property"></td>
</tr>
</form>
</table>
但是当我在这个 div 中添加完全相同的 html 时,它不再起作用了:
<table>
<form action="" method="post" id="prop-form">
{{ form.hidden_tag() }}
<tr>
<td>Construction year: </td>
<td>
{{ form.construction_year(size=10) }}
<div id="transfer-tax-rate-div"></div>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Save property"></td>
</tr>
</form>
</table>
然而,没有周围的 table ,它确实有效:
<form action="" method="post" id="prop-form">
{{ form.hidden_tag() }}
Construction year: {{ form.construction_year(size=10) }} <br />
<div id="transfer-tax-rate-div"></div>
<input type="submit" value="Save property">
</form>
解决方案原来在于 <form>
的位置标签,因为如果我像最后一段代码那样将它们移出表格,一切正常:
<form action="" method="post" id="prop-form">
{{ form.hidden_tag() }}
<table>
<tr>
<td>Construction year: </td>
<td>
{{ form.construction_year(size=10) }}
<div id="transfer-tax-rate-div"></div>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Save property"></td>
</tr>
</table>
</form>
请原谅我没有提供所有相关信息,打扰了你们所有的时间。谢谢你给了我继续寻找的能量!
关于python - 如何使用 WTForms 插入条件字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720119/