Flaskを使用して構築しているWebサイトでは、フォームの検証にWTFormsを使用しています。現在、別のフィールドに依存するフィールドがあります。ユーザーが特定の年(2012)を挿入すると、Javascriptを使用していくつかのラジオボタンが挿入されます。RadioFieldをオプションにしました。これは正常に機能しますが、実際にラジオボタンを使用してフォームを送信した場合、その値は残りNone
ます。
いくつかのコードを話すために; 関連する2つのフォームフィールドは次のように定義されています。
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() }}
、construction_year
2012年の場合にいくつかのhtmlを挿入するJavascriptを削除して作成しました。
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からのヒントに従って、私も標準フラスコからそれを取得しようとしました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>
一方、周囲にテーブルがないと、機能します。
<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>
すべての関連情報を提供するのではなく、すべての皆さんの時間を煩わせてすみません。でも見続けるエネルギーをくれてありがとう!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加