【问题标题】:flask-wtforms update object with preselection of selectField not working预选 selectField 的烧瓶 wtforms 更新对象不起作用
【发布时间】:2018-04-19 05:43:19
【问题描述】:

我正在尝试更新一个对象,除了我的带有预选的 selectFields 之外,它工作正常:

routes.py:

form_inquiry = ViewInquiryForm()     

form_inquiry.taskID.choices = [(g.id, g.taskDescription) for g in InquiryTask.query.all()]
form_inquiry.taskID.process_data(resultInquiry.taskID)

if request.method == 'GET':
   form_inquiry.lastEditByID = resultUser.username
   return render_template('main/viewInquiry.html', form_inquiry=form_inquiry)

if form_inquiry.validate_on_submit():
    inquiry = resultInquiry
    inquiry.lastEditByID = current_user.id
    inquiry.taskID = form_inquiry.taskID.data
    db.session.commit()
    return redirect(url_for('main.viewInquiries'))

我想在selectField字段中预选当前的taskID,它代表数据库中本次查询的当前taskID,使用如下命令:

form_inquiry.taskID.process_data(resultInquiry.taskID)

这工作正常,但是当我使用它时,未应用 selectField 中新的、不同的 taskID 选择。记录不会更新此属性。 form_inquiry.taskID.data 将保持预选值。 当我删除预选时,它工作正常。

那么,还有其他方法吗?

【问题讨论】:

    标签: flask flask-wtforms


    【解决方案1】:

    解决方案是在 GET 请求中设置您的预选值,并且在 POST 请求期间不要进行任何预选。

    form_inquiry = ViewInquiryForm()     
    
    form_inquiry.taskID.choices = [(g.id, g.taskDescription) for g in InquiryTask.query.all()]
    
    if request.method == 'GET':
        form_inquiry.taskID.process_data(resultInquiry.taskID)
        form_inquiry.lastEditByID = resultUser.username
        return render_template('main/viewInquiry.html', form_inquiry=form_inquiry)
    

    【讨论】:

    • 它工作正常。我想我被“form.xyz.choices”以前做过的事实蒙蔽了双眼!谢谢你。你为我节省了很多时间。
    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2021-12-15
    • 2014-07-05
    • 2019-01-01
    相关资源
    最近更新 更多