【问题标题】:Submitting edited Prepopulate Flask-WTForm data from database从数据库提交已编辑的 Prepopulate Flask-WTForm 数据
【发布时间】:2016-05-03 10:31:24
【问题描述】:

我想用我的数据库中的数据预先填充我的表单,以进行必要的更改并使用这些更改修改我的数据库。 但是,当我运行下面的代码时,当 form.validate_on_submit() 方法被初始化时,表单的数据是来自数据库的预填充数据,而不是编辑后的版本。如何访问表单数据的编辑值?

@auth.route('/edit_projects', methods=['GET', 'POST'])
@auth.route('/edit_projects/<project>', methods=['GET', 'POST'])
@login_required
def edit_projects(project=None):
    form = ProjectForm()
    project_db = Project.query.all()
    edit_project_db = Project.query.filter_by(id=project).first()
    if project != None: 
        form.name.data=edit_project_db.name
        form.project_brief.data=edit_project_db.project_brief
        form.project_description.data=edit_project_db.project_description

    if form.validate_on_submit():
        edit_project_db.name = form.name.data
        edit_project_db.project_brief = form.project_brief.data
        edit_project_db.project_description = form.project_description.data
        db.session.commit()
        flash('Product %s updated.' %(str(form.name.data)))

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    我认为区分“GET”和“POST”可能会有所帮助,在“GET”上您会预先填充字段,但在“POST”上您想查看用户是否实际编辑了表单内容。

    我会像这样拆分代码:

    if request.method == 'GET':
        # prepopulate
        if project != None: 
            form.name.data=edit_project_db.name
            form.project_brief.data=edit_project_db.project_brief
    elif request.method == 'POST':
        # check form validates
        if form.validate_on_submit():
           # keep the rest as it is
            ...
    

    希望这能提供一些帮助。

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多