내가 구축중인 웹 사이트에서 Flask 양식 유효성 검사에 WTForms을 사용하고 있습니다. 현재 다른 필드에 의존하는 필드가 있습니다. 사용자가 특정 연도 (2012)를 삽입하면 Javascript를 사용하여 몇 개의 라디오 버튼이 삽입됩니다. RadioField를 선택 사양으로 만들었지 만 제대로 작동하지만 실제로 라디오 버튼을 사용하여 양식을 제출하면 그 값은 None
으로 유지됩니다.WTForms와 함께 조건부 필드를 삽입하는 방법은 무엇입니까?
일부 코드를 말하다. 다음과 같이 두 개의 관련 양식 필드가 정의되어 있습니다
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을 삽입하는 일부 자바 스크립트 작성 : 쉽게 읽을 수
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
사람이 내가 잘못 여기서 뭘하는지 어떤 생각을 가지고 있습니까? 모든 팁을 환영합니다!
[편집] 내가 표준 플라스크 request.form
에서 점점 시도 끄트머리,하지만 그 중 하나 'transfer_tax_rate'
에 대한 항목을 포함하지 않습니다 아래 user3147268에서 팁을 따라.
보기에서 양식을 자바 스크립트 코드가있는 템플릿으로 전달 했습니까? – boh
@boh - 예, 했어요. 다른 모든 필드는 잘 나타나고 정상적으로 돌아옵니다. 다른 모든 것이 완벽하게 작동합니다. 그것은 잘 돌아 가지 않는 한 분야입니다. 나는 그것이 js를 사용하여 동적으로 생성했기 때문에 그것이라고 의심하지만, 그것이 사실인지 또는 어떻게 해결할 수 있는지 전혀 모른다. – kramer65
form.transfer_tax_rate.data를 사용하는 대신 Flask 자체에서 제공하는 request.form [ 'transfer_tax_rate']을 시도해 볼 수 있습니다. – user3147268