Flask 烧瓶查询选择字段编辑表单

Flask 烧瓶查询选择字段编辑表单,flask,drop-down-menu,flask-sqlalchemy,flask-wtforms,Flask,Drop Down Menu,Flask Sqlalchemy,Flask Wtforms,我的表单中有以下查询选择字段,它将在插入操作过程中从数据库中选择值。 一旦插入完成,插入的记录将显示在表上,并带有编辑选项。 单击“编辑”后,我希望表单预先填充所选记录 在我的例子中,有两个查询选择字段需要预先填充。 我正在努力做到这一点,但我在这方面没有太大成功。 你能告诉我我做错了什么吗 表格编码 代码路由 代码Jinja模板 这是DB模型 我用下面的代码解决了它 form.Ear_type_name.data =int(Earid[0].id) form.Ear_per_name.data

我的表单中有以下查询选择字段,它将在插入操作过程中从数据库中选择值。 一旦插入完成,插入的记录将显示在表上,并带有编辑选项。 单击“编辑”后,我希望表单预先填充所选记录

在我的例子中,有两个查询选择字段需要预先填充。 我正在努力做到这一点,但我在这方面没有太大成功。 你能告诉我我做错了什么吗

表格编码

代码路由

代码Jinja模板

这是DB模型
我用下面的代码解决了它

form.Ear_type_name.data =int(Earid[0].id)
form.Ear_per_name.data = int(Perid[0].id)
上面的代码是通过各个选择字段的索引值来形成选择字段类型。在我的例子中,它是1 | Nirav,所以我必须通过1来选择字段形式数据类型

在表单中,我使用了选择字段而不是查询选择字段

您可以使用以下方法从数据库加载此字段

这是我更新的编辑方法代码路径


编码快乐。

你试过form=EarningEntryFormrequest.form,obj=earnings吗?@Calumah谢谢你的更新,我试过你的建议,但点击编辑后仍然显示相同的值。我想将所选值发送到QuerySelectField。如果每次都从DB加载,我不确定该如何编辑。我只是想在下拉列表中显示所选的值。所以您从来没有直接使用queryselectfield来实现这一点?真遗憾,我遇到了同样的问题
@bp.route('/earnings/edit_earn',methods=['GET','POST'])
@login_required
def edit_earn():
    earID = request.args.get("earn_id")
    earnings = Earnings.query.filter_by(id= earID,U_id=current_user.id).all()
    form = EarningEntryForm()
    meth = request.method
    if form.validate_on_submit():
        earnings.Ear_per_name =str(form.Ear_per_name.data)
        earnings.Ear_type_name =str(form.Ear_type_name.data)
        earnings.Ear_amt = form.Ear_amt.data
        earnings.Ear_date = form.Ear_date.data
        earnings.Ear_FileName = form.Ear_img.data.filename
        earnings.Ear_img = form.Ear_img.data.read()
        earnings.Ear_comm =form.Ear_comm.data
    elif request.method == 'GET':
        Earid = EarType.query.filter_by(EarType_name =earnings[0].Ear_type_name).all()
        Perid = Persons.query.filter_by(per_name =earnings[0].Ear_per_name).all()
        #form = EarningEntryForm(Ear_per_name=Perid[0].id, Ear_type_name=Earid[0].id)
        form.Ear_type_name.data = Earid
        form.Ear_per_name.data= Perid
        form.Ear_amt.data = earnings[0].Ear_amt
        form.Ear_date.data = earnings[0].Ear_date
        form.Ear_FileName.data = earnings[0].Ear_FileName
        form.Ear_comm.data = earnings[0].Ear_comm
    return render_template('earning/earn_Edit.html', form=form, ear=earnings)
<div class="col-md-4">
 <h1>E2ISA Earning Edit</h1>

<form class="form-inline" method="post">
{{ form.hidden_tag() }}
{{ form.csrf_token }}

    <input type="text" name="ear_id" value="{{ear.id}}" hidden>

<p>
Selected Person Name:<br>
{{ form.Ear_per_name(class='btn btn-secondary dropdown-toggle')}}
{% for error in form.Ear_type_name.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>

<p>
Selected Earning Type:<br>
{{ form.Ear_type_name(class='btn btn-secondary dropdown-toggle')}}
    {% for error in form.Ear_type_name.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>

<p>
{{ form.Ear_amt.label }}<br>
{{ form.Ear_amt(size=32,class='form-control') }}
    {% for error in form.Ear_amt.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>

<p>
{{ form.Ear_date.label }}<br>
{{ form.Ear_date(class='datepicker') }}
    {% for error in form.Ear_date.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>

<p>
{{ form.Ear_FileName.label }}<br>
{{ form.Ear_FileName (class='form-control')}}
    {% for error in form.Ear_FileName.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>
{{ form.Ear_comm.label }}<br>
{{ form.Ear_comm (class='form-control') }}
    {% for error in form.Ear_comm.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>

<p>{{ form.submit(class='btn btn-primary') }}</p>
</form>
<form class="form-inline" action="/earnings/DeleteEarn">
{{ form.csrf_token }}
<input type="text" name="ear_id" value="{{ear.id}}" hidden>

{{ form.Delete(class='btn btn-primary') }}
</form>

</div>
{% endblock %}
form.Ear_type_name.data =int(Earid[0].id)
form.Ear_per_name.data = int(Perid[0].id)
Ear_per_name=SelectField('PersonName', choices=[], coerce=int)
Ear_type_name=SelectField('EarningType Name', choices=[], coerce=int)
person=Persons.query.filter_by(u_id=current_user.id)
eartype = EarType.query.filter_by(u_id=current_user.id)
eartype_list = [(j.id, j.EarType_name) for j in eartype]
person_list = [(i.id, i.per_name) for i in person]
form.Ear_per_name.choices = person_list
form.Ear_type_name.choices = eartype_list
@bp.route('/earnings/edit_earn',methods=['GET','POST'])
@login_required
def edit_earn():
    earID = request.args.get("earn_id")
    earnings = Earnings.query.filter_by(id= earID,U_id=current_user.id).all()
    form = EarningEntryForm(request.form,obj=earnings)
    meth = request.method
    if form.validate_on_submit():
        earnings.Ear_per_name =str(form.Ear_per_name.data)
        earnings.Ear_type_name =str(form.Ear_type_name.data)
        earnings.Ear_amt = form.Ear_amt.data
        earnings.Ear_date = form.Ear_date.data
        earnings.Ear_FileName = form.Ear_img.data.filename
        earnings.Ear_img = form.Ear_img.data.read()
        earnings.Ear_comm =form.Ear_comm.data

    elif request.method == 'GET':
        #THis code will load the dropdown box.
        person = Persons.query.filter_by(u_id=current_user.id)
        eartype = EarType.query.filter_by(u_id=current_user.id)
        eartype_list = [(j.id, j.EarType_name) for j in eartype]
        person_list = [(i.id, i.per_name) for i in person]
        form.Ear_per_name.choices = person_list
        form.Ear_type_name.choices = eartype_list

        #This where edit form take place.
        Earid = EarType.query.filter_by(EarType_name =earnings[0].Ear_type_name).all()
        Perid = Persons.query.filter_by(per_name =earnings[0].Ear_per_name).all()
        form.Ear_type_name.data =int(Earid[0].id)
        form.Ear_per_name.data = int(Perid[0].id)
        form.Ear_amt.data = earnings[0].Ear_amt
        form.Ear_date.data = earnings[0].Ear_date
        form.Ear_FileName.data = earnings[0].Ear_FileName
        form.Ear_comm.data = earnings[0].Ear_comm
    return render_template('earning/earn_Edit.html', form=form, ear=earnings)