Javascript 表单使用数据填充迭代表单字段

Javascript 表单使用数据填充迭代表单字段,javascript,python,flask,flask-wtforms,wtforms,Javascript,Python,Flask,Flask Wtforms,Wtforms,我不是Python和Flask方面的专家,但我需要您的支持 我试图自动填充三个字段:科隆、城市和州当用户捕获邮政编码字段时,我使用Jquery在邮政编码字段失去焦点后调用“postalcode”方法,查询成功执行,并且为殖民地、城市和州字段分配了预期值,但在中呈现表单时“update_profile.html”字段中不显示任何内容,显示为空 请帮助我知道我的做法不对,或者我遗漏了哪些步骤。非常感谢,我立即显示了我的代码: forms.py class ProfileInfoForm(FlaskF

我不是Python和Flask方面的专家,但我需要您的支持

我试图自动填充三个字段:科隆、城市和州当用户捕获邮政编码字段时,我使用Jquery在邮政编码字段失去焦点后调用“postalcode”方法,查询成功执行,并且为殖民地、城市和州字段分配了预期值,但在中呈现表单时“update_profile.html”字段中不显示任何内容,显示为空

请帮助我知道我的做法不对,或者我遗漏了哪些步骤。非常感谢,我立即显示了我的代码:

forms.py
class ProfileInfoForm(FlaskForm):
zipcode = StringField(_l('El código postal'), validators=[DataRequired(message = _l('El código postal es requerido'))], render_kw={"placeholder": _l('El código postal')})
settlement = SelectField(choices=[]) 
city = StringField(_l('Ciudad'), validators=[DataRequired(message = _l('La ciudad es requerida'))], render_kw={"placeholder": _l('Ciudad')})
state = StringField(_l('Estado'), validators=[DataRequired(message = _l('El estado es requerido'))], render_kw={"placeholder": _l('Estado')})
submit = SubmitField(_l('Actualizar'))

@classmethod
def new(cls, codpostal):
    # Instantiate the form
    form = cls()
    print(f'codpostal: {codpostal}')
    locdata = Postalcode.query.filter(Postalcode.d_codigo == codpostal).first()
    locsettles = Postalcode.query.filter(Postalcode.d_codigo == codpostal).all()
    # Update the choices for the settlement field
    print(f'locdata.d_ciudad: {locdata.d_ciudad}')
    print(f'locdata.d_estado: {locdata.d_estado}')
    print(f'settle.d_asenta: {[settle.d_asenta for settle in locsettles]}')
    form.city.data = locdata.d_ciudad
    form.state.data = locdata.d_estado
    form.settlement.choices = [(settle.d_asenta, settle.d_asenta) for settle in locsettles]
    return form
以正确填充字段的有效方式调用新方法后

Código Postal: 09810
codpostal: 09810
locdata.d_ciudad: Ciudad de México
locdata.d_estado: Ciudad de México
settle.d_asenta: ['Granjas Esmeralda', 'Los Cipreses', 'Minerva', 'Progreso del Sur']

views.py                             
@member.route('/update_profile', methods=['GET', 'POST'])
@login_required
def update_profile():
    form = ProfileInfoForm()
    if form.validate_on_submit():
        current_user.zipcode = form.zipcode.data
        current_user.settlement = form.settlement.data
        current_user.city = form.city.data
        current_user.state = form.state.data
        db.session.add(current_user._get_current_object())
        db.session.commit()
        flash(_('La información se actualizo correctamente!'),'success')
        return redirect(url_for('member.profile_info', profile = current_user))
    if request.method == 'POST' and not form.validate_on_submit():
        flash_errors(form)
    form.zipcode.data = current_user.zipcode
    form.settlement.data = current_user.settlement
    form.city.data = current_user.city
    form.state.data = current_user.state
    return render_template('member/update_profile.html', form=form, profile = current_user)

@member.route('/postalcode', methods=['GET', 'POST'])
@login_required
def postalcode():
    codpostal = request.form['codigopostal']
    print((f'Código Postal: {codpostal}' ))                    
    form = ProfileInfoForm.new(codpostal)
    print((f'form.name.data despues: {form.name.data}' ))      
    print((f'form.settlement.data: {form.settlement.data}' ))  
    print((f'form.city.data: {form.city.data}' ))              
    print((f'form.state.data: {form.state.data}' ))   
    return render_template('member/update_profile.html', form=form, profile = current_user)

form.name.data despues:
form.settlement.data: None
form.city.data: Ciudad de México
form.state.data: Ciudad de México

update_profile.html     
<form action="" method="post" class="form-validate is-alter" role="form">
    {{ form.csrf_token() }}
    <div class="row g-gs">
        <div class="col-md-6">
            <div class="form-group">
                <label class="form-label" for="fva-zipcode">{{ _('Código postal') }}</label>
                <div class="form-control-wrap">
                    {{ form.zipcode(type="text", id="fva-zipcode", class='form-control cod-postal required', maxlength="6") }}
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label class="form-label" for="fva-settlement">{{ _('Colonia') }} </label>
                <div class="form-control-wrap">
                    {{ form.settlement(id="fva-settlement", class='form-control form-select required', maxlength="64") }}
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label class="form-label" for="fva-city">{{ _('Ciudad') }} </label>
                <div class="form-control-wrap">
                    {{ form.city(type="text", id="fva-city", class='form-control required', maxlength="64") }}
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-group">
                <label class="form-label" for="fva-state">{{ _('Estado') }}</label>
                <div class="form-control-wrap">
                    {{ form.state(type="text", id="fva-state", class='form-control required', maxlength="64") }}
                </div>
            </div>
        </div>
        <div class="col-md-12">
            <div class="form-group">
                {{ wtf.form_field(form.submit, type="submit", class='btn btn-lg btn-primary') }}
            </div>
        </div>
    </div>
</form>

<script>
    $(".cod-postal").on("blur", function () {
        var cp = $(this).val().trim().toUpperCase();
        if (cp.length >= 5 ) {
            $.post('/member/postalcode', {
                codigopostal: cp
            }).done(function(response) {
                
            }
            }).fail(function() {
                $(destElem).text("{{ _('Error: CP no encontrado.') }}");
            });
        } else {
            Swal.fire({
                icon: 'error',
                title: 'Validación de cp!',
                text: 'El cp proporcionado no esta completo',
                footer: 'CP proporcionado: ' + cp
            });
        }
    });
</script>
Código邮政:09810
邮政编码:09810
locdata.d_ciudad:墨西哥城
地点:墨西哥城
阿森塔州结算:[“格兰哈斯埃斯梅拉达”、“西普雷斯”、“密涅瓦”、“南部进步”]
views.py
@路由('/update_profile',methods=['GET','POST'])
@需要登录
def更新_配置文件():
form=ProfileInfoForm()
if form.validate_on_submit():
当前_user.zipcode=form.zipcode.data
当前用户结算=表单结算数据
当前_user.city=form.city.data
当前_user.state=form.state.data
db.session.add(当前用户获取当前对象())
db.session.commit()
flash('La información se reactizo correctamente!'),'success')
返回重定向(url_for('member.profile_info',profile=current_user))
如果request.method==“POST”而不是form.validate\u on\u submit():
闪存错误(表格)
form.zipcode.data=当前用户.zipcode
form.consolution.data=当前用户结算
form.city.data=当前用户城市
form.state.data=当前用户状态
返回呈现模板('member/update\u profile.html',form=form,profile=current\u user)
@route('/postalcode',methods=['GET','POST'])
@需要登录
def postalcode():
codpostal=request.form['codigopostal']
印刷品((f'Código Postal:{codpostal}'))
表单=ProfileInfoForm.new(codpostal)
打印((f'form.name.data despues:{form.name.data}'))
打印((f'form.consolution.data:{form.consolution.data}'))
打印((f'form.city.data:{form.city.data}'))
打印((f'form.state.data:{form.state.data}'))
返回呈现模板('member/update\u profile.html',form=form,profile=current\u user)
form.name.data文件:
form.settlement.data:无
form.city.data:墨西哥城
form.state.data:墨西哥城
更新_profile.html
{{form.csrf_token()}}
{{{('Código postal')}
{form.zipcode(type=“text”,id=“fva zipcode”,class='form-control-cod-postalrequired',maxlength=“6”)}
{{{('Colonia')}
{{form.consolution(id=“fva-consolution”,class='form-control-form-select-required',maxlength=“64”)}
{{{('Ciudad')}
{{form.city(type=“text”,id=“fva city”,class='form-control required',maxlength=“64”)}
{{{('Estado')}
{form.state(type=“text”,id=“fva state”,class='form-control required',maxlength=“64”)}
{{wtf.form_字段(form.submit,type=“submit”,class='btn btn lg btn primary')}
$(“.cod postal”)。在(“模糊”,函数(){
var cp=$(this.val().trim().toUpperCase();
如果(cp.length>=5){
$.post(“/member/postalcode”{
代码:cp
}).完成(功能(响应){
}
}).fail(函数(){
$(destElem).text(“{{{(错误:CP no encontrado.)}”);
});
}否则{
喷火({
图标:“错误”,
标题:“Validación de cp!”,
文字:“El cp Proportcionado no esta completo”,
页脚:'CP proporcionado:'+CP
});
}
});