首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶QuerySelectField编辑表格

烧瓶QuerySelectField编辑表格
EN

Stack Overflow用户
提问于 2018-05-28 10:30:08
回答 1查看 1.5K关注 0票数 0

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

在我的例子中,我有两个查询选择字段,其中需要预先填充。我非常努力地去做你能告诉我我做错了什么吗?

表格代码

代码语言:javascript
复制
def choice_pername():
    return Persons.query.filter_by(u_id=current_user.id)
    #return Persons.query.with_entities(Persons.per_name).filter_by(u_id=current_user.id)

def choice_eartype():
    return EarType.query.filter_by(u_id=current_user.id)

class EarningEntryForm(FlaskForm):
    Ear_per_name = QuerySelectField(query_factory=choice_pername,allow_blank=False,get_label='per_name',)
    Ear_type_name = QuerySelectField(query_factory=choice_eartype,allow_blank=False,get_label='EarType_name')
    Ear_amt = FloatField('Earning Amount:-',validators=[DataRequired()])
    Ear_date = DateField('Earning Date:-',format = '%Y-%m-%d',validators=[DataRequired()])
    Ear_FileName = StringField('Earning FileName:-')
    Ear_img = FileField('Earning Proof File:-')
    Ear_comm = TextAreaField('Earning Comment:-',validators=[DataRequired()])
    submit = SubmitField('Save Earning')
    Delete = SubmitField('Delete')

代码路由

代码语言:javascript
复制
@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)

代码Jinja模板

代码语言:javascript
复制
<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 %}

这里是DB模型

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 06:31:40

我使用以下代码解析它

代码语言:javascript
复制
form.Ear_type_name.data =int(Earid[0].id)
form.Ear_per_name.data = int(Perid[0].id)

上面的代码是每个选定字段的pass索引值,以形成select字段类型,在我的情况下是1|Nirav,所以我必须传递1来选择字段表单数据类型。

表单中的我使用了select字段而不是查询select字段.

代码语言:javascript
复制
Ear_per_name=SelectField('PersonName', choices=[], coerce=int)
Ear_type_name=SelectField('EarningType Name', choices=[], coerce=int)

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
@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)

卡丁快乐。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50564319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档